static void Main(string[] args)
{
var tempPath = @"c:\Temp"; if (Directory.Exists(tempPath))
{
Directory.Delete(tempPath,true);
}
Directory.CreateDirectory(tempPath); ZipFile.ExtractToDirectory(@"c:\test.xmind", tempPath); //缩略图地址
var thumbPath = tempPath + "\\Thumbnails\\thumbnail.png";
var targetThumbPath = tempPath + "\\Thumbnails\\160X120.png";
var fi=new FileInfo(targetThumbPath);
if (fi.Exists)
{
fi.IsReadOnly = false;
fi.Delete();
}
int width;
int height;
ThumbImage.GetMicroImage(thumbPath, targetThumbPath, , , out width, out height);
Console.WriteLine("缩略图:"+ targetThumbPath);
Console.WriteLine("预览图:" + thumbPath + " 原图宽:" + width + ",原图高:" + height);
//附件
var attachmentsPath = new DirectoryInfo(tempPath + "\\attachments");
var count = ;
foreach (var o in attachmentsPath.GetFiles())
{
count++;
Console.WriteLine("附件"+count+" : "+o.Name);
} Console.WriteLine("成功!");
Console.ReadKey();
}
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging; namespace ConsoleApplication2
{
internal class ThumbImage
{
/// <summary>
/// 高质量缩放图片
/// </summary>
/// <param name="originFilePath">源图的路径</param>
/// <param name="targetFilePath">存储缩略图的路径</param>
/// <param name="destWidth">缩放后图片宽度</param>
/// <param name="destHeight">缩放后图片高度</param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns>表明此次操作是否成功</returns>
public static bool GetMicroImage(string originFilePath, string targetFilePath, int destWidth, int destHeight,
out int width, out int height)
{
width = ;
height = ;
try
{
using (Image imgSource = new Bitmap(originFilePath))
{
width = imgSource.Width;
height = imgSource.Height;
//System.Drawing.Image imgSource = b;
int sW = , sH = ;
// 按比例缩放
var sWidth = imgSource.Width;
var sHeight = imgSource.Height;
if (sHeight > destHeight || sWidth > destWidth)
{
if ((sWidth*destHeight) > (sHeight*destWidth))
{
sW = destWidth;
sH = (destWidth*sHeight)/sWidth;
}
else
{
sH = destHeight;
sW = (sWidth*destHeight)/sHeight;
}
}
else
{
sW = sWidth;
sH = sHeight;
}
var outBmp = new Bitmap(destWidth, destHeight);
var g = Graphics.FromImage(outBmp);
g.Clear(Color.Transparent);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgSource, new Rectangle((destWidth - sW)/, (destHeight - sH)/, sW, sH), , ,
imgSource.Width, imgSource.Height, GraphicsUnit.Pixel);
g.Dispose();
// 以下代码为保存图片时,设置压缩质量
var encoderParams = new EncoderParameters();
var quality = new long[];
quality[] = ;
var encoderParam = new EncoderParameter(Encoder.Quality, quality);
encoderParams.Param[] = encoderParam;
outBmp.Save(targetFilePath);
outBmp.Dispose();
}
//压缩一下PNG图
//CompressPng(targetFilePath, targetFilePath); return true;
}
catch (Exception)
{
return false;
}
}
}
}

使用C#解析XMIND文件格式的更多相关文章

  1. Python解析Xmind工具

    使用Xmind写用例 使用Python解析Xmind,统计用例个数 代码: from xmindparser import xmind_to_dict import tkinter as tk fro ...

  2. 用Python解析XMind

    本文来自网易云社区 作者:孙圣翔 转自:http://shengxiang.me/article/35/python-parse-xmind.html XMind是画思维脑图很好的工具,正好组里有个需 ...

  3. 时序数据库 Apache-IoTDB 源码解析之文件格式简介(三)

    上一章聊到在车联网或物联网中对数据库的需求,以及 IoTDB 的整体架构,详情请见: 时序数据库 Apache-IoTDB 源码解析之系统架构(二) 打一波广告,欢迎大家访问IoTDB 仓库,求一波 ...

  4. 提效工具-python解析xmind文件及xmind用例统计

    现状 每个公司都有一个维护测试case的系统,有自研的也有买的,比如QC, 禅道等等,QA往往习惯使用xmind等思维导图工具来编写测试用例,因为思路清晰,编写方便,那么这就有一个问题,大多公司要求所 ...

  5. MFC里面解析json文件格式

    CString strTemp; //CString ->string; string stringMsg = (LPCSTR)(CStringA)strTemp; //string -> ...

  6. python 解析top文件格式

    top - 16:14:35 up 2 days, 3:04, 7 users, load average: 2.22, 1.84, 1.77 Tasks: 512 total, 2 running, ...

  7. Dotnet文件格式解析

    0x0.序 解析过程并没有介绍对pe结构的相关解析过程,网上此类相关资料很多可自行查阅,本文只介绍了网上资料较少的从pe结构的可选头中的数据目录表中获取dotnet目录的rva和size,到完全解析d ...

  8. wav音频文件格式解析【个人笔记】(自用)

    1. WAV格式 wav是微软开发的一种音频文件格式,注意,wav文件格式是无损音频文件格式,相对于其他音频格式文件数据是没有经过压缩的,通常文件也相对比较大些.. 支持多种音频数字,取样频率和声道, ...

  9. mp4文件格式解析(转)

    mp4文件格式解析 MP4文件格式带数据详解 MP4文件格式的解析,以及MP4文件的分割算法

随机推荐

  1. scanf() 与 gets()--转载

    scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用__gets__函数. gets可以接收空格:而 ...

  2. UVA 540 Team Queue(模拟+队列)

    题目代号:UVA 540 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page ...

  3. Internet History, Technology, and Security(week7)——Technology: Application Protocols

    Layer 4: Applications Application Layer TCP提供了“a reliable pipe”(一个坚固的水管)连接用户和服务器,确保了数据能准确不出意外地传输,所以A ...

  4. Ecipse代码调试

    1.设置断点 2.启动调试 在代码空白处中右击,选择Debug as —>1 Java Application 快捷键 表示当前实现继续运行直到下一个断点,快捷键为F8. 表示打断整个进程 表示 ...

  5. HDU2602 Bone Collector(01背包)

    HDU2602 Bone Collector 01背包模板题 #include<stdio.h> #include<math.h> #include<string.h&g ...

  6. C++ STL 二分查找

    转载自 https://www.cnblogs.com/Tang-tangt/p/9291018.html 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound ...

  7. AtomicIntegerFieldUpdater 源码分析

    AtomicIntegerFieldUpdater AtomicIntegerFieldUpdater 能解决什么问题?什么时候使用 AtomicIntegerFieldUpdater? 1)字段必须 ...

  8. Jmeter响应中中文乱码怎么解决?

    在jmeter的bin目录下有一个jmeter.properties的文件,打开它,搜索sampleresult.default.encoding,把它的注释打开,也就是把最前面的#去掉,改成samp ...

  9. dig中文帮助

    NAME(名称)     dig — 发送域名查询信息包到域名服务器 SYNOPSIS(总览)     dig [@server] domain [⟨query-type⟩] [⟨query-clas ...

  10. layui框架中layer父子页面交互的方法分析

    本文实例讲述了layui框架中layer父子页面交互的方法.分享给大家供大家参考,具体如下: layer是一款近年来备受青睐的web弹层组件,官网地址是:http://layer.layui.com/ ...