代码修改图片DPI

1.使用C# 修改图片DPI

private void Form1_DragDrop(object sender,DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
this.textBox1.Text = ((string[])e.Data.GetData(DataFormats.FileDrop.ToString()))[0];
}

}

private void textBox1_DragOver(object sender,DragEventArgs e)
{
e.Effect = DragDropEffects.copy;
}

using (Bitmap newImage = new Bitmap(Image.FromFile(this.textBox1.Text)))
                {
                    newImage.SetResolution(300,300);
                    newImage.Save("123.jpg",
                        System.Drawing.Imaging.ImageFormat.Jpeg);
                }

上面是winform窗口拖拽文件,然后在修改图片DPI。测试成功,可以正常修改

2. VC修改图片DPI

代码原理和C#一致,但是不能修改成功。

使用GDIPlus

int GetimageCLSID(const WCHAR *format,CLSID *pCLSID)
{
//得到格式为format的图像文件的编码值,访问该格式图像的COM组件的GUID值保存在pCLSID中
UINT num = 0;
UINT size = 0;

ImageCodecInfo* pImageCodecInfo = NULL;
GetimageEncodeRSSize(&num,&size);

if(size == 0)
return FALSE; // 编码信息不可用

//分配内存
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return FALSE; // 分配失败

//获得系统中可用的编码方式的所有信息
GetimageEncoders(num,size,pImageCodecInfo);

//在可用编码信息中查找format格式是否被支持
for(UINT i = 0; i < num; ++i)
{
//MimeType:编码方式的具体描述
if(wcscmp(pImageCodecInfo[i].MimeType,format) == 0)
{
*pCLSID = pImageCodecInfo[i].Clsid;
free(pImageCodecInfo);
return TRUE;
}
}

free(pImageCodecInfo);
return FALSE;
}

 

Gdiplus::Bitmap bitPic(m_wcFile,FALSE);
bitPic.SetResolution(300,300);
CLSID climageClsid;
GetimageCLSID(L"image/jpeg",&climageClsid);
bitPic.Save(L"123.jpg",&climageClsid);

原理都是一样的,为啥不行,原因待查,记录下

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...