C# Net将Tiff对象转换为字节数组并返回

C# Net将Tiff对象转换为字节数组并返回,c#,bytearray,type-conversion,tiff,libtiff.net,C#,Bytearray,Type Conversion,Tiff,Libtiff.net,您好,我找不到将多页tiff图像转换为字节数组的示例 对于将字节数组转换为Tiff,我使用此方法 public static Tiff CreateTiffFromBytes(byte[] bytes) { using (var ms = new MemoryStream(bytes)) { Tiff tiff = Tiff.ClientOpen("in-memory", "r", ms, new TiffStream())

您好,我找不到将多页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;
    }
//imageIn是tif图像,有12页
公共静态字节[]ImageToByteArray(System.Drawing.Image imageIn)
{       
使用(var ms=new MemoryStream())
{
保存(ms,System.Drawing.Imaging.ImageFormat.Tiff);
返回ToArray女士();
}
}
公共静态列表GetAllPages(System.Drawing.Image multiTiff)
{
var images=新列表();
var bitmap=(bitmap)multiff;
int count=bitmap.GetFrameCount(FrameDimension.Page);
for(int idx=0;idx
转换到字节数组后,我会丢失页面。 字节数组中的图像只有一页

  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);
Image src=Image.FromFile(源文件);
//imagesInSource.计数(页数)为12
列表图像源=GetAllPages(src);
字节[]imageData=ImageToByteArray(src);
Image des=ImageConvert.ByteArrayToImage(图像数据);
//imagesInSource.Count(页数)为1
列表图像des=GetAllPages(des);

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

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

编辑:

在第三个代码段中,您为
System.Drawing.Image
的每一页创建了图像,但只将第一个生成的图像转换为字节数组。你应该使用类似于

List<byte[]> imagesBytes = new List<byte[]>();
foreach (Image img in imagesInSource)
{
    byte[] imageData = ImageToByteArray(src);
    imageBytes.Add(imageData);
}
List imagesBytes=new List();
foreach(imagesInSource中的图像img)
{
字节[]imageData=ImageToByteArray(src);
添加(imageData);
}
然后,您应该向服务器发送
imagesBytes
,并从中创建多个TIFF图像


不管怎样,看起来你应该多想想你到底想做什么。因为现在我还不清楚所有这些转换的目的是什么。

看起来您已经就同一问题发布了3个问题。你想完成什么?你想对字节数组做什么?@Bobrovsky。我需要这样做:将BitMiracle.LibTiff.Classic.Tiff对象转换为从web服务上的客户端发送的字节数组。在web服务端,我需要转换回字节数组以转换BitMiracle.LibTiff.Classic.Tiff,执行一些操作(从多Tiff中检索所有页面作为图像),最后我需要将BitMiracle.LibTiff.Classic.Tiff对象转换为System.Drawing.Image对象。对我来说,是的,因为图像处理不是我的专业,所以很少被编译。你能帮我吗?我用谷歌搜索它,但我使用LibTiff时有点担心内存泄漏,因为我对这个库没有任何经验。@Bobrovky。我认为问题出在将多页TIFF转换为字节数组的方法(byte[]ImageToByteArray(System.Drawing.imageImageIn))中。我在我的问题中添加了这个方法定义。因为如果我尝试转换返回这个方法的字节数组,我会得到一个页面的tiff图像。那么,将包含多页TIFF的System.Drawing.Image转换为字节数组的正确方法是什么呢?首先,感谢您的回复。我将传递给System.Drawing.Image的方法ImageToByteArray对象类型,并从多页TIF Image src=Image.FromFile(MultiTiffile)初始化此对象,我不明白为什么ImageToByteArray方法的响应只返回一页作为字节数组。@Bobrovsky:我想请您帮个忙,您可以发布一个示例,说明如何将BitMiracle.LibTiff.Classic.Tiff对象转换为字节数组,以及如何将此字节数组转换为BitMiracle.LibTiff.Classic.Tiff对象。我认为使用BitMiracle.LibTiff比使用.NET类型更好。多谢各位much@whyme请提供更多详细信息并提出新问题。你有什么(文件名,
System.Drawing.Image
或其他什么)?你想在服务器上做什么?好的,我在这里发布了新问题: