我目前使用的是C#和EmguCV (OpenCV),我想用当前由Mat类表示的JPEG/PNG压缩/解压缩图像。我不想把它存储在磁盘上,只想把它压缩在内存中。我们的目标是稍后通过TCP/IP传输它。
非常感谢以下任务的一些代码片段:
A. Compress: Mat -> JPEG/PNG compressed byte[]
B. Decompress: JPEG/PNG compressed byte[] -> Mat发布于 2017-02-17 20:19:33
下面是用JPG压缩Mat对象的最后代码,它返回一个字节数组用于网络传输:
using Emgu.CV;
using System.Drawing.Imaging;
private VideoQuality quality;
private ImageCodecInfo codecInfo;
private EncoderParameters encoderParameters;
public byte[] compress(Mat image) {
using(MemoryStream memstream = new MemoryStream()) {
long tstart = Toolkit.CurrentTimeMillis();
image.Bitmap.Save(memstream, codecInfo, encoderParameters);
return memstream.ToArray();
}
}
private void setVideoQuality(long quality) {
this.codecInfo = getEncoder(ImageFormat.Jpeg);
this.encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);
}
private ImageCodecInfo getEncoder(ImageFormat format) {
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach(ImageCodecInfo codec in codecs) {
if(codec.FormatID == format.Guid) {
return codec;
}
}
return null;
}下面是用于解码字节数组的相应代码:
private Image createImage(byte[] bytes) {
using (MemoryStream memstream = new MemoryStream(bytes, 0, bytes.Length)) {
memstream.Position = 0;
return Image.FromStream(memstream, true);
}
}希望这对某些人有帮助:-)谢谢你的帮助!
https://stackoverflow.com/questions/42123049
复制相似问题