使用索引像素格式将文本写入图像

时间:2012-04-25 17:57:40

标签: .net image-processing system.drawing imaging

我有单色TIFF文件(1 bpp),我想写文字。当我将它们加载到System.Drawing.Image,并尝试从该图像实例化Graphics对象时,我收到错误,“无法从具有索引像素格式的图像创建图形对象。”

我可以将图像转换为非索引格式,例如JPEG,但结果图像尺寸非常大。

我想在保持图像尺寸的同时实现这一目标。如何在不将这些图像转换为其他格式的情况下将文本写入这些图像?

3 个答案:

答案 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);