将多页.tif导入C#中的位图

时间:2017-11-09 16:47:51

标签: c# image-processing bitmap

我正在尝试打开12页的.tiff文件。然后,我将对单个像素执行一些数学计算,然后将其吐出。如何导入然后拆分?我试图将其导入到位图数组。我在开头声明了数组:

Bitmap[] tifBitmap = new Bitmap[10];

然后我想在这个方法中给每个人写一个值:

private void splitTiff(String location)
    {
        int activePage;
        int pages;

        System.Drawing.Image image = System.Drawing.Image.FromFile(location);

        pages = image.GetFrameCount(FrameDimension.Page);



        for (int i = 0; i < 12; i++)
        {
            activePage = i + 1;

            image.SelectActiveFrame(FrameDimension.Page, i);

            //this is what I need to figure out
            tifBitmap[i - 1] = [save image slice here somehow];


        }
    }

现在我知道这段代码很乱,但它显示了这个想法。我怎么能把它拉下来?

1 个答案:

答案 0 :(得分:1)

好吧,我接受了这个问题,因为它与我的职业相关(我是一名影像DBA),因为我没有知道答案。

无论如何,这是我发现的(这可能是也可能不是最佳答案,但似乎有效)

您使用SelectActiveFrame位在正确的轨道上,但我认为您需要做的是:

  1. 创建一个MemoryStream
  2. 使用.BMP格式将图像保存到MemoryStream
  3. 创建从MemoryStream加载的Bitmap对象
  4. 这是我的示例代码:

    Image sampleTiffImage = Image.FromFile(@"C:\SomeExample.tif");
    
    int pageCount = sampleTiffImage.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
    
    
    for (int pageNum = 0; pageNum < pageCount; pageNum++)
    {
        sampleTiffImage.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, pageNum);
    
        using (MemoryStream memStream = new MemoryStream())
        {
            sampleTiffImage.Save(memStream, ImageFormat.Bmp);
            using (Bitmap myBitmap = (Bitmap)Bitmap.FromStream(memStream))
            {
                myBitmap.Save(@"C:\someFol\" + pageNum + ".bmp");
                // note: the above line is saving to disk.  I'm doing it for testing purposes,
                // but you're going to want to copy it to your array.
            }
        }
    }
    

    我正在保存文件,但你想要将它们加载到你的阵列中。

    希望有所帮助!