2

您好我找不到将 MULTI PAGE tiff 图像转换为字节数组的示例。

要将字节数组转换为 Tiff,我使用此方法

    public static Tiff CreateTiffFromBytes(byte[] bytes)
    {
        using (var ms = new MemoryStream(bytes))
        {
            Tiff tiff = Tiff.ClientOpen("in-memory", "r", ms, new TiffStream());
            return tiff;
        }
    }

编辑:

此方法将具有更多页面的 TIFF 图像转换为字节数组。我认为这种方法将是问题的根源。

    //imageIn is tif image with 12 pages
    public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
    {       
        using (var ms = new MemoryStream())
        {
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
            return ms.ToArray();
        }
    }

   public static List<System.Drawing.Image> GetAllPages(System.Drawing.Image multiTiff)
    {
        var images = new List<System.Drawing.Image>();
        var bitmap = (Bitmap)multiTiff;
        int count = bitmap.GetFrameCount(FrameDimension.Page);

        for (int idx = 0; idx < count; idx++)
        {
            bitmap.SelectActiveFrame(FrameDimension.Page, idx);
            using (var byteStream = new MemoryStream())
            {
                bitmap.Save(byteStream, ImageFormat.Tiff);

                images.Add(System.Drawing.Image.FromStream(byteStream));
            }
        }
        return images;
    }

转换为字节数组后,我丢失了页面。字节数组中的图像只有一页。

  Image src = Image.FromFile(source);
    //imagesInSource.Count (pages) is 12
    List<Image> imagesInSource = GetAllPages(src);

    byte[] imageData = ImageToByteArray(src);

    Image  des = ImageConvert.ByteArrayToImage(imageData);
    //imagesInSource.Count (pages) is 1
    List<Image> imagesInDes = GetAllPages(des);
4

1 回答 1

1

我不确定为什么不能将 TIFF 文件发送到服务?毕竟,该文件只是字节。

并且您在第一个代码段中的代码不正确,因为您处理了传递给Tiff对象的内存流。你不应该那样做。该Tiff对象将处理流本身。

编辑:

在第三个片段中,您为每个页面创建图像,System.Drawing.Image但您仅将第一个生成的图像转换为字节数组。你应该使用类似的东西

List<byte[]> imagesBytes = new List<byte[]>();
foreach (Image img in imagesInSource)
{
    byte[] imageData = ImageToByteArray(src);
    imageBytes.Add(imageData);
}

然后你应该发送imagesBytes到你的服务器并从中创建几个 TIFF 图像。

无论如何,您似乎应该更多地考虑您真正想要做什么。因为现在我不清楚所有这些转换是为了什么。

于 2012-08-21T18:05:48.733 回答