2

花了 2 天时间才意识到 C# Bitmap.Save 方法有问题(对于 JPEG/灰度/8bbp),我尝试使用 FreeImage 看看是否可以正确保存它,乍一看似乎如此,但仔细检查后似乎它也不起作用。

这是我的测试:

如果我做

FreeImage.SaveBitmap(aImage, aSavePath, FREE_IMAGE_FORMAT.FIF_JPEG, FREE_IMAGE_SAVE_FLAGS.DEFAULT);

图像 DPI 未正确保存,如果我将位图转换为 FIBITMAP(以便我可以指定 DPI

MemoryStream imageStream = new MemoryStream();
aImage.Save(imageStream, aImageFormat);

FIBITMAP dib = FreeImage.LoadFromStream(imageStream, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE, freeImageFormat);

FreeImage.SetResolutionX(dib, (uint)aImage.HorizontalResolution);
FreeImage.SetResolutionY(dib, (uint)aImage.VerticalResolution);
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, aSavePath, FREE_IMAGE_SAVE_FLAGS.DEFAULT);

关于如何使用 FreeImage 保存位图并保留 DPI 和 bpp 的任何想法?还是 FreeImage.Save 方法也有问题?

4

2 回答 2

0

某些软件在获取分辨率时依赖元数据,因此您可以尝试将带有 DPI 字段的 EXIF 添加到使用 FreeImage 创建的 jpeg。

PS你的任务似乎很简单,我相信你可以找到更多的SDK。

于 2014-07-25T03:59:08.977 回答
0

我放弃了这两个选项(FreeImage 和 Magick.NET)并选择了 GraphicsMagick.NET。

于 2014-08-04T09:21:22.280 回答