我有我想要写入文本的单色TIFF文件(1 bpp)。当我将它们加载到System.Drawing.Image中,并尝试从该图像实例化一个Graphics对象时,我收到错误“无法从具有索引像素格式的图像创建图形对象。”将文本写入带有索引像素格式的图像
我可以将图像转换为非索引格式,例如JPEG,但最终的图像尺寸非常大。
我想在保持图像大小的同时完成此操作。如何在不将这些图像转换为其他格式的情况下将文字写入这些图像?
我有我想要写入文本的单色TIFF文件(1 bpp)。当我将它们加载到System.Drawing.Image中,并尝试从该图像实例化一个Graphics对象时,我收到错误“无法从具有索引像素格式的图像创建图形对象。”将文本写入带有索引像素格式的图像
我可以将图像转换为非索引格式,例如JPEG,但最终的图像尺寸非常大。
我想在保持图像大小的同时完成此操作。如何在不将这些图像转换为其他格式的情况下将文字写入这些图像?
使用由Hans帕桑特留下评论的想法,我所在这篇文章的代码项目:http://www.codeproject.com/Articles/15186/Bitonal-TIFF-Image-Converter-for-NET
适应这个代码,我转换的图像32bpp的写道,图像上的文本,然后将其转化为1bpp映射。
您可以使用支持TIFF图像的图像处理API,如ImageMagick.NET。我相信你可以使用Annotate方法向其中呈现文本。
希望这会有所帮助。
您可以使用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);
这是不可能的。写入16或24或32bpp位图,将* *转换为1bpp位图。 http://stackoverflow.com/questions/273624/c-gdi-create-1bpp-mask-from-image – 2012-04-26 00:42:30
它似乎是可能的,在至少3.5,根据杰森的答案 - 使用bitmap.Clone – Patrick 2016-02-10 01:36:14