2

こんにちは私はマルチページ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;
    }

バイト配列に変換した後、ページが失われます。バイト配列からの画像には1ページしかありません。

  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ストリーム自体を破棄します。

編集:

3番目のスニペットでは、の各ページの画像を作成します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 に答える