首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#内存中使用JPEG或PNG压缩图像?

如何在C#内存中使用JPEG或PNG压缩图像?
EN

Stack Overflow用户
提问于 2017-02-09 04:32:48
回答 1查看 2.7K关注 0票数 0

我目前使用的是C#和EmguCV (OpenCV),我想用当前由Mat类表示的JPEG/PNG压缩/解压缩图像。我不想把它存储在磁盘上,只想把它压缩在内存中。我们的目标是稍后通过TCP/IP传输它。

非常感谢以下任务的一些代码片段:

代码语言:javascript
复制
A. Compress:   Mat -> JPEG/PNG compressed byte[]
B. Decompress: JPEG/PNG compressed byte[] -> Mat
EN

回答 1

Stack Overflow用户

发布于 2017-02-17 20:19:33

下面是用JPG压缩Mat对象的最后代码,它返回一个字节数组用于网络传输:

代码语言:javascript
复制
    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;
    }

下面是用于解码字节数组的相应代码:

代码语言:javascript
复制
    private Image createImage(byte[] bytes) {
        using (MemoryStream memstream = new MemoryStream(bytes, 0, bytes.Length)) {
            memstream.Position = 0;
            return Image.FromStream(memstream, true);
        }
    }

希望这对某些人有帮助:-)谢谢你的帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42123049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档