如何在C#中将位图压缩到较小的大小?

如何在C#中将位图压缩到较小的大小?,c#,xamarin,C#,Xamarin,我的位图太大,无法上载到打印机。我将把它压缩成更小的尺寸,这样通过打印机传输的数据就更少了。但是我不想减少位图的长度和宽度。我做了一些研究,但他们都需要一个流,特别是如下 bitmap.compress(Bitmap.Format.jpeg,50,outputStream); 为什么我需要一个流来存储文件?我怎样才能跳过它,得到我想要的压缩位图?我试过了 originalBitmap = Bitmap.decodeByteArray(imageByteData); //

我的位图太大,无法上载到打印机。我将把它压缩成更小的尺寸,这样通过打印机传输的数据就更少了。但是我不想减少位图的长度和宽度。我做了一些研究,但他们都需要一个流,特别是如下

    bitmap.compress(Bitmap.Format.jpeg,50,outputStream);
为什么我需要一个流来存储文件?我怎样才能跳过它,得到我想要的压缩位图?我试过了

    originalBitmap = Bitmap.decodeByteArray(imageByteData);
    //Line below not working and got error
    compressedBitmap = Bitmap.compress(Bitmap.Format.jpeg,50,outputStream);

在outputStream(我的下载文件夹)中,我确实看到了压缩图像,但如何再次访问压缩图像?不幸的是,压缩方法并不是那么简单。我的问题是如何压缩位图并在其他操作中使用压缩后的位图?谢谢。

您可以将其压缩为内存流:

//Compress to a stream in memory
byte[] compressedData = null;
using(var stream = new MemoryStream())
{
    bitmap.Compress(Bitmap.Format.Jpeg, 50, stream);
    compressedData = stream.ToArray();
}

//load compressed bitmap from memory
using(var stream = new MemoryStream(compressedData))
{
    var compressedBitmap = BitmapFactory.DecodeStream(stream);
}

看一看很不清楚。为什么位图太大而无法上传到打印机。?时间结果输出?太多你实际上不需要的数据了流或不流与此无关。您的问题的答案是“使用位图。压缩”,您已经在这样做了。您的核心问题似乎是不了解C#中I/O的工作原理。如果将压缩位图写入文件流,则只需打开该文件即可读取结果输出。Hi@TaW,我的位图几乎是3MB,当我调试时,将数据发送到打印机的代码行需要很长时间才能完成,然后再转到下一行。我们看不到您代码的详细信息,你可以发布一个基本的演示,这样我们可以更好地帮助你吗?嗨,阿尔贝托,在执行了所有的代码之后,为什么compressedBitmap是空的?