C#使用GDI+创建缩略图实例
作者:shichen2014 时间:2023-02-21 01:57:16
本文实例讲述了C#使用GDI+创建缩略图的方法,分享给大家供大家参考。具体方法分析如下:
C#的Gdi+还是相当好用的。创建缩略图步骤如下:
1. Image保存图像,需要一个CLSID的参数,它可以这样获得:
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
2. Image::Save的另外一个参数EncoderParameters可用于图像的压缩*(这是从网上抄下来的)
使用img/jpeg配合encoderParameters.Parameter[0].Value设置 可以大幅度的减小图像文件所占磁盘空间
// 保存到文件
EncoderParameters encoderParameters;
//构造编码参数列表
//数组中只包含一个EncoderParameter对象
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
//参数类型为LONG
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
//只设置一个参数
encoderParameters.Parameter[0].NumberOfValues = 1;
ULONG quality;
//压缩JPEG图片质量为原来的80%
quality = 80;
encoderParameters.Parameter[0].Value = &quality;
3. 关于缩略图
我使用了一下Image的GetThumbnailImage,发现对于某些图像效果很不理想,(颜色较鲜艳的缩略图效果好点,但是对于那些色差不大整体又暗的图像效果就差劲了). 这个时候使用Graphic配合Bitmap直接画缩略尺寸的图像效果挺好
BOOL QImgProcess::CreateThumb( int cx ,QBuf &out)
{
ASSERT(m_pImg != NULL);
// 创建缩略图
int nWidth = m_pImg->GetWidth();
if (cx >= nWidth)
{
return TRUE;
}
int nHeight = m_pImg->GetHeight();
int nThumbHeight = nHeight * cx / m_pImg->GetWidth() ;
Bitmap bitmap(cx, nThumbHeight, PixelFormat24bppRGB);
Graphics graph(&bitmap);
graph.DrawImage(m_pImg, Rect(0,0,cx,nThumbHeight));
......
}
希望本文所述对大家的C#程序设计有所帮助。
标签:C#,GDI+,缩略图
0
投稿
猜你喜欢
java实现监听u盘示例分享
2023-10-20 02:14:05
java中多线程与线程池的基本使用方法
2023-06-23 15:24:09
3种C# 加载Word的方法
2021-06-05 21:06:41
Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)
2022-08-11 11:03:29
Android实现记住用户名和密码功能
2023-10-06 13:02:07
Android WebView 不支持 H5 input type="file" 解决方法
2022-08-30 21:07:08
浅谈Java中注解Annotation的定义、使用、解析
2021-07-29 04:07:52
在Android界面上显示和获取Logcat日志输出的方法
2023-02-19 20:02:19
Android—基于微信开放平台v3SDK开发(微信支付填坑)
2023-05-20 09:04:02
Servlet 过滤器详细介绍
2021-10-21 13:51:57
java并发包JUC同步器框架AQS框架原文翻译
2022-08-22 22:17:23
如何利用java实现生成PDF文件
2023-03-31 16:25:36
java mybatis框架配置详解
2023-11-25 08:09:16
学习Android自定义Spinner适配器
2022-12-15 01:28:31
Java编程调用微信分享功能示例
2022-10-16 06:39:49
Java实现简单通讯录管理系统
2022-06-28 01:15:54
Android SQLite数据库增删改查操作的案例分析
2022-06-06 02:55:03
C++实现哈夫曼编码
2022-07-20 20:39:01
基于WPF实现面包屑控件的示例代码
2021-12-19 12:34:33
idea启动springmvc项目时报找不到类的解决方法
2023-11-09 16:51:04