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

C# 使用System.Drawing编辑多页TIFF图像,c#,winforms,tiff,system.drawing,C#,Winforms,Tiff,System.drawing,我试图通过从图像创建图形来编辑多页tiff,但遇到错误消息:“无法从具有索引像素格式的图像创建图形对象。” 如何编辑多页tiff?这里有一个指向CodeProject示例的链接,其中包含将tiff文件转换为普通位图的代码,然后您可以像处理任何其他位图一样使用该位图: 我曾经编写过一个小实用程序,用于从tiff图像创建加密PDF。下面是从tiff图像获取页面的一段代码: var bm= new System.Drawing.Bitmap('tif path'); var total = bm.Ge

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


如何编辑多页tiff?

这里有一个指向CodeProject示例的链接,其中包含将tiff文件转换为普通位图的代码,然后您可以像处理任何其他位图一样使用该位图:


我曾经编写过一个小实用程序,用于从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
}
var bm=new System.Drawing.Bitmap('tif path');
var total=bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);

对于(var x=0;x我写了一些东西从多页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中的数字)提取到新位图中。该位图没有索引,可以创建图形对象。

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

…与多页TIFF无关。索引图像格式意味着它有一个调色板,例如256色图像。一个1位图像(B&W)也可以算作有一个调色板,有两种颜色


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

我无法从图像中找到GetInstance方法?应该注意的是,在SelectActiveFrame中,tiffpage=0将是第1页。