如何调整代码来提升图片的DPI设置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计445个文字,预计阅读时间需要2分钟。
1. 使用C语言进行编程。C语言是一种广泛使用的编程语言,以其高效性和灵活性而闻名。它适用于系统编程、嵌入式系统开发以及性能敏感的应用程序。以下是使用C语言的一个简单示例:
c#include
int main() { printf(Hello, World!\n); return 0;}
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);
原理都是一样的,为啥不行,原因待查,记录下
本文共计445个文字,预计阅读时间需要2分钟。
1. 使用C语言进行编程。C语言是一种广泛使用的编程语言,以其高效性和灵活性而闻名。它适用于系统编程、嵌入式系统开发以及性能敏感的应用程序。以下是使用C语言的一个简单示例:
c#include
int main() { printf(Hello, World!\n); return 0;}
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);
原理都是一样的,为啥不行,原因待查,记录下

