我有想要写入文本的单色 TIFF 文件 (1 bpp)。当我将它们加载到 System.Drawing.Image 并尝试从该图像实例化图形对象时,我收到错误消息“无法从具有索引像素格式的图像创建图形对象”。
我可以将图像转换为非索引格式,例如 JPEG,但生成的图像尺寸非常大。
我想在保持图像尺寸减小的同时做到这一点。如何在不将它们转换为另一种格式的情况下将文本写入这些图像?
我有想要写入文本的单色 TIFF 文件 (1 bpp)。当我将它们加载到 System.Drawing.Image 并尝试从该图像实例化图形对象时,我收到错误消息“无法从具有索引像素格式的图像创建图形对象”。
我可以将图像转换为非索引格式,例如 JPEG,但生成的图像尺寸非常大。
我想在保持图像尺寸减小的同时做到这一点。如何在不将它们转换为另一种格式的情况下将文本写入这些图像?
使用 Hans Passant 留下的评论中的想法,我在代码项目上找到了这篇文章:http: //www.codeproject.com/Articles/15186/Bitonal-TIFF-Image-Converter-for-NET
修改此代码后,我将图像转换为 32bpp,在该图像上写入文本,然后将其转换为 1bpp。
您可以使用 System.Drawing.Bitmap.Clone 转换内存中的图像。这满足了小文件大小的要求。如果您需要在 winforms 上使用 TIF,请使用 TiffBitmapEncoder。
Bitmap bmpTif = new Bitmap(imagePath);
Bitmap bmp = bmpTif.Clone(new Rectangle(0, 0, pageWidth, pageHeight),
PixelFormat.Format32bppRgb);
Graphics g = Graphics.FromImage(bmp);
// Do your g.DrawString's
Bitmap bmpNew = bmp.Clone(new Rectangle(0, 0, pageWidth, pageHeight),
PixelFormat.Format1bppIndexed);
bmpNew.Save(imagePath2);
您可以使用支持 TIFF 图像的ImageMagick.NET 之类的图像处理 API。我相信您可以使用 Annotate 方法将文本呈现到其中。
希望这可以帮助。