【问题标题】:Write text to image with indexed pixel format使用索引像素格式将文本写入图像
【发布时间】:2023-03-27 00:58:01
【问题描述】:

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

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

我想在缩小图像尺寸的同时完成此操作。如何在不将它们转换为另一种格式的情况下将文本写入这些图像?

【问题讨论】:

  • 这是不可能的。写入 16 或 24 或 32bpp 位图,将 that 转换为 1bpp 位图。 stackoverflow.com/questions/273624/…
  • 根据 Jason 的回答,至少在 3.5 中似乎是可能的 - 使用 bitmap.Clone

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


【解决方案1】:

利用Hans Passant留下的评论中的想法,我在代码项目上找到了这篇文章:http://www.codeproject.com/Articles/15186/Bitonal-TIFF-Image-Converter-for-NET

修改此代码,我将图像转换为 32bpp,在该图像上写入文本,然后将其转换为 1bpp。

【讨论】:

    【解决方案2】:

    您可以使用 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);
    

    【讨论】:

      【解决方案3】:

      您可以使用支持 TIFF 图像的图像处理 API,例如 ImageMagick.NET。我相信您可以使用 Annotate 方法将文本渲染到其中。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        相关资源
        最近更新 更多