最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#針對System.Drawing.Bitmap壓縮的實現

 更新時間:2025年07月04日 11:11:55   作者:wangnaisheng  
C#中System.Drawing.Bitmap壓縮可通過調整尺寸和JPEG質量實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 C# 中,System.Drawing.Bitmap 是表示圖像的核心類之一。如果想要對 Bitmap 對象進行壓縮,通常是指將其保存為文件時使用較低的圖像質量(例如 JPEG 格式),或者調整其尺寸以減少內存占用或文件大小。

一、使用Image.Save方法并設置壓縮參數(推薦)

將 Bitmap 保存為 JPEG 并設置壓縮質量

using System;
using System.Drawing;
using System.Drawing.Imaging;

public class ImageCompressor
{
    public static void CompressAndSave(Bitmap bitmap, string outputPath, long quality = 80L)
    {
        // 指定編碼器為 JPEG
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);

        // 設置壓縮質量
        Encoder qualityEncoder = Encoder.Quality;
        EncoderParameters encoderParams = new EncoderParameters(1);
        EncoderParameter qualityParam = new EncoderParameter(qualityEncoder, quality); // 0-100
        encoderParams.Param[0] = qualityParam;

        // 保存圖像
        bitmap.Save(outputPath, jpgEncoder, encoderParams);
    }

    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }
}

使用示例:

Bitmap bmp = new Bitmap("input.png");
ImageCompressor.CompressAndSave(bmp, "output.jpg", 70L); // 壓縮質量設為70%
bmp.Dispose();

二、調整圖像尺寸進行“體積”壓縮

如果希望進一步減小圖像大小,可以先調整圖像的寬高,然后可以結合上面的方法,把縮小后的圖像再進行壓縮保存:

public static Bitmap ResizeBitmap(Bitmap original, int newWidth, int newHeight)
{
    Bitmap resized = new Bitmap(newWidth, newHeight);
    using (Graphics g = Graphics.FromImage(resized))
    {
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.DrawImage(original, 0, 0, newWidth, newHeight);
    }
    return resized;
}

三、將壓縮后的 Bitmap 轉為字節(jié)數組(用于網絡傳輸等)

public static byte[] CompressBitmapToBytes(Bitmap bitmap, long quality = 80L)
{
    using (var ms = new MemoryStream())
    {
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
        Encoder qualityEncoder = Encoder.Quality;
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = new EncoderParameter(qualityEncoder, quality);

        bitmap.Save(ms, jpgEncoder, encoderParams);
        return ms.ToArray();
    }
}

注意事項:

  1. 格式支持:只有某些圖像格式(如 JPEG)支持質量壓縮,PNG 是無損壓縮格式,不支持。
  2. 資源釋放:記得調用 .Dispose() 來釋放 Bitmap 和 Graphics 等資源。
  3. 性能優(yōu)化:頻繁操作圖像時建議使用 unsafe 或 LockBits 提高性能,但復雜度會增加。
  4. 跨平臺兼容性System.Drawing.Common 在 .NET Core/.NET 5+ 中不再支持非 Windows 平臺。如果需要跨平臺,請考慮使用 ImageSharp。

替代方案:使用 ImageSharp(跨平臺推薦)

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Formats.Jpeg;

var image = Image.Load("input.png");
image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); // 縮放
image.SaveAsJpeg("output.jpg", new JpegEncoder { Quality = 70 }); // 壓縮質量

到此這篇關于C#針對System.Drawing.Bitmap壓縮的實現的文章就介紹到這了,更多相關C# System.Drawing.Bitmap壓縮內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#使用iTextSharp設置PDF所有頁面背景圖功能實例

    C#使用iTextSharp設置PDF所有頁面背景圖功能實例

    這篇文章主要介紹了C#使用iTextSharp設置PDF所有頁面背景圖功能,實例分析了C#使用iTextSharp設置PDF頁面背景圖的實現方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 解析C#設計模式編程中外觀模式Facade Pattern的應用

    解析C#設計模式編程中外觀模式Facade Pattern的應用

    這篇文章主要介紹了C#設計模式編程中外觀模式Facade Pattern的應用,外觀模式中分為門面(Facade)和子系統(tǒng)(subsystem)兩個角色來進行實現,需要的朋友可以參考下
    2016-02-02
  • C#中Winform窗體Form的關閉按鈕變灰色的方法

    C#中Winform窗體Form的關閉按鈕變灰色的方法

    這篇文章主要介紹了C#中Winform窗體Form的關閉按鈕變灰色的方法,對于C#程序界面的設計有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C#編程實現帶有Aero效果的窗體示例

    C#編程實現帶有Aero效果的窗體示例

    這篇文章主要介紹了C#編程實現帶有Aero效果的窗體,涉及C#調用動態(tài)鏈接庫針對窗體屬性的相關操作技巧,需要的朋友可以參考下
    2017-07-07
  • C#中接口(Interface)的深入詳解

    C#中接口(Interface)的深入詳解

    這篇文章主要給大家介紹了關于C#中接口(Interface)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • C# string轉換為幾種不同編碼的Byte[]的問題解讀

    C# string轉換為幾種不同編碼的Byte[]的問題解讀

    這篇文章主要介紹了C# string轉換為幾種不同編碼的Byte[]的問題解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C#算法設計與分析詳解

    C#算法設計與分析詳解

    本文詳細講解了C#的算法設計與分析,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • C#定義并實現單鏈表實例解析

    C#定義并實現單鏈表實例解析

    這篇文章主要介紹了C#定義并實現單鏈表實例解析,有助于讀者加深對C#實現數據結構的理解,需要的朋友可以參考下
    2014-07-07
  • C# winfrom實現讀取修改xml

    C# winfrom實現讀取修改xml

    這篇文章主要為大家詳細介紹了C# winfrom實現讀取修改xml的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 在C#中調用Python代碼的兩種實現方式

    在C#中調用Python代碼的兩種實現方式

    這篇文章主要介紹了在C#中調用Python代碼的兩種實現方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論

中超| 尼玛县| 日照市| 德钦县| 兴和县| 公主岭市| 淳安县| 缙云县| 慈利县| 蒙城县| 昆山市| 澳门| 枣庄市| 如皋市| 清水县| 富源县| 枞阳县| 河西区| 沙坪坝区| 中西区| 嵩明县| 德州市| 阿克苏市| 贵定县| 庆云县| 太白县| 增城市| 海淀区| 咸宁市| 新沂市| 上林县| 临泽县| 泗阳县| 佛山市| 湄潭县| 阳曲县| 分宜县| 竹北市| 万荣县| 祁阳县| 都江堰市|