【问题标题】:How to compress bitmap to smaller size in C#?如何在 C# 中将位图压缩为更小的尺寸?
【发布时间】:2019-11-13 14:57:14
【问题描述】:

我的位图太大,无法上传到打印机。我将把它压缩到更小的尺寸,以便通过打印机传输更少的数据。但我不想减少位图的长度和宽度。我已经做了一些研究,但它们都需要一个流,尤其是如下

    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 中,我确实看到了压缩图像,但我怎样才能再次访问压缩图像?不幸的是,压缩方法并不是那么简单。我的问题是如何压缩位图并在另一个操作中使用压缩位图?谢谢。

【问题讨论】:

  • 非常不清楚。 您的位图是否太大而无法上传到打印机。?时间?结果输出?您实际上不需要的数据太多? - 流与否与它无关。
  • 您的问题的答案是“使用 Bitmap.Compress”,您已经在这样做了。您的核心问题似乎是您不了解 I/O 在 C# 中的工作原理。如果您将压缩位图写入文件流,则只需打开该文件即可读取结果输出。
  • 嗨@TaW,我的位图快3MB了,当我调试时,将数据发送到打印机的代码行在进入下一行之前需要很长时间才能完成。
  • 我们看不到您的代码细节,能否请您发布一个基本的演示,以便我们更好地帮助您?

标签: c# xamarin


【解决方案1】:

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

//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);
}

【讨论】:

  • 嗨,Alberto,执行完所有代码后,为什么compressedBitmap 为空?
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多