我有单色TIFF文件(1 bpp),我想写文字。当我将它们加载到System.Drawing.Image,并尝试从该图像实例化Graphics对象时,我收到错误,“无法从具有索引像素格式的图像创建图形对象。”
我可以将图像转换为非索引格式,例如JPEG,但结果图像尺寸非常大。
我想在保持图像尺寸的同时实现这一目标。如何在不将这些图像转换为其他格式的情况下将文本写入这些图像?
答案 0 :(得分:3)
使用Hans Passant留下的评论中的想法,我将这篇文章放在代码项目上:http://www.codeproject.com/Articles/15186/Bitonal-TIFF-Image-Converter-for-NET
调整此代码后,我将图像转换为32bpp,在该图像上写入文本,然后将其转换为1bpp。
答案 1 :(得分:1)
您可以使用支持TIFF图像的ImageMagick.NET等图像处理API。我相信你可以使用Annotate方法将文本渲染到其中。
希望这有帮助。
答案 2 :(得分:1)
您可以使用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);