2012-04-25 83 views
2

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

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

我想在保持图像大小的同时完成此操作。如何在不将这些图像转换为其他格式的情况下将文字写入这些图像?

+1

这是不可能的。写入16或24或32bpp位图,将* *转换为1bpp位图。 http://stackoverflow.com/questions/273624/c-gdi-create-1bpp-mask-from-image – 2012-04-26 00:42:30

+0

它似乎是可能的,在至少3.5,根据杰森的答案 - 使用bitmap.Clone – Patrick 2016-02-10 01:36:14

回答

1

您可以使用支持TIFF图像的图像处理API,如ImageMagick.NET。我相信你可以使用Annotate方法向其中呈现文本。

希望这会有所帮助。

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