使用System.Drawing编辑多页TIFF图像

时间:2009-08-25 11:58:35

标签: c# winforms tiff system.drawing

我想通过从图像创建图形来编辑多页tiff,但是我遇到了错误消息: “无法从具有索引像素格式的图像创建图形对象。”< / EM>

如何编辑多页tiff?

4 个答案:

答案 0 :(得分:6)

我写了一些东西从多页tiff文件中提取单页。

// Load as Bitmap
using (Bitmap bmp = new Bitmap(file))
{
    // Get pages in bitmap
    int frames = bmp.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
    bmp.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, tiffpage);
    if (bmp.PixelFormat != PixelFormat.Format1bppIndexed)
    {
        using (Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height))
        {
            bmp2.Palette = bmp.Palette;
            bmp2.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
            // create graphics object for new bitmap
            using (Graphics g = Graphics.FromImage(bmp2))
            {
                // copy current page into new bitmap
                g.DrawImageUnscaled(bmp, 0, 0);

                                // do whatever you migth to do
                ...

            }
        }
    }
}

该片段加载tif文件并将一页(变量tiffpage中的数字)提取到新的位图中。这没有编入索引,可以创建图形对象。

答案 1 :(得分:1)

这是一个CodeProject示例的链接,其中包含将TIFF文件转换为普通Bitmap的代码,然后您可以像任何其他Bitmap一样使用该代码:

http://www.codeproject.com/KB/GDI-plus/BitonalImageConverter.aspx

答案 2 :(得分:1)

我曾经写过一些小实用程序来从tiff图像创建加密的pdf。这是从tiff图像获取页面的一段代码:

var bm= new System.Drawing.Bitmap('tif path');
var total = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
for(var x=0;x<total;x++)
{
    bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page,x);
    var img=Image.GetInstance(bm,null,false);

    //do what ever you want with img object
}

答案 3 :(得分:1)

错误:无法从具有索引像素格式的图像创建图形对象。

...与多重TIFF无关。索引图像格式意味着它具有颜色调色板,例如,这是一个256色的图像。 1位图像(B&amp; W)也可以计为具有2种颜色的调色板。

您无法对使用调色板的图像执行Graphics操作,首先需要将它们转换为15位或更多颜色深度。