我有一个来自扫描仪的Tiff文件。它的分辨率为300 dpi。但后来我需要将其更改为不同的值,例如100。
在不丢失初始压缩和颜色深度的情况下,最好的方法是什么?
我已经尝试使用 . 打开Tiff,Bitmap.FromFile()
但我得到了OutOfMemoryException
,也使用了 FreeImage 库,但是在这里,如果 Tiff 是灰度的,它总是使用LZW压缩而不是JPEG。我知道 LZW 更好,但JPEG对我来说是强制性的。
我有一个来自扫描仪的Tiff文件。它的分辨率为300 dpi。但后来我需要将其更改为不同的值,例如100。
在不丢失初始压缩和颜色深度的情况下,最好的方法是什么?
我已经尝试使用 . 打开Tiff,Bitmap.FromFile()
但我得到了OutOfMemoryException
,也使用了 FreeImage 库,但是在这里,如果 Tiff 是灰度的,它总是使用LZW压缩而不是JPEG。我知道 LZW 更好,但JPEG对我来说是强制性的。
当您更改分辨率时,您是否希望图像仍然以英寸为单位大小?或者当您达到 100 时,您是否期望 300 像素现在跨越 3 英寸。
如果您希望它具有相同的大小,则必须将图像重新采样为较少的像素数 (1/3)。在这种情况下,您必须解码图像,重新采样,然后重新编码。您肯定会在重新采样中丢失信息,然后使用 TIFF 支持的有损 JPEG 压缩会丢失更多信息。
如果您的意思是让图像现在看起来大 3 倍,那么您可以通过仅编辑 TIFF 的元数据来做到这一点。无需触摸实际像素数据即可更改分辨率。libtiff 可以做到这一点——我不知道 LibTiff.NET 是否可以,但可能。
如果您正在寻找商业解决方案,我公司的DotImage Document Imaging也可以做到这一点。
这OutOfMemoryException
是因为 .NET 不支持带有 JPEG 压缩的 TIFF。有关更多信息,请参阅此答案。