c# GDI+ Image.Save()或者Bitmap.Save()方法保存高質量圖片


GDI+保存質量比較高的圖片的方法,使用Image或者Bitmap的Save方法調節圖像保存的質量。

Image.Save方法共有五種重載 
其中Save(String, ImageCodecInfo, EncoderParameters)Save(Stream, ImageCodecInfo,EncoderParameters)這兩種方法課以調節圖像質量。

Save.(string ,ImageCodeInfo,EncoderParameters) 使用方法:

參數:

filename                類型:System.String        字符串,包含要將此 Image 保存到的文件的名稱。

encoder                 類型:System.Drawing.Imaging.ImageCodecInfo         Image  ImageCodecInfo

encoderParams    類型:System.Drawing.Imaging.EncoderParameters            用於該 Image  EncoderParameters


步驟:

①獲得編碼器的函數,

    ImageCodecInfo GetEncoderInfo(String mimeType)

    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for(j = 0; j < encoders.Length; ++j)
        {
            if(encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;
    }
    可以直接複製過去使用。
獲取編碼器
    ImageCodecInfo myImageCodecInfo;
    //獲得JPEG格式的編碼器
    myImageCodecInfo = GetEncoderInfo("image/jpeg");
設置圖像質量
    System.Drawing.Imaging.Encoder myEncoder;
    EncoderParameter myEncoderParameter;
    EncoderParameters myEncoderParameters;
    // for the Quality parameter category.
    myEncoder = System.Drawing.Imaging.Encoder.Quality;
    // EncoderParameter object in the array.
    myEncoderParameters = new EncoderParameters(1);
    //設置質量 數字越大質量越好,但是到了一定程度質量就不會增加了,MSDN上沒有給範圍,只說是32爲非負整數
    myEncoderParameter = new EncoderParameter(myEncoder, 100L);
    myEncoderParameters.Param[0] = myEncoderParameter;
④保存圖像
    bitmap.Save(@"D:\Users\Administrator\Desktop\Piexl1.jpeg", myImageCodecInfo, myEncoderParameters);

            

MSDN上的給的例子:

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Example_SetJPEGQuality
{
    public static void Main()
    {
        Bitmap myBitmap;
        ImageCodecInfo myImageCodecInfo;
        Encoder myEncoder;
        EncoderParameter myEncoderParameter;
        EncoderParameters myEncoderParameters;

        // Create a Bitmap object based on a BMP file.
        myBitmap = new Bitmap("Shapes.bmp");

        // Get an ImageCodecInfo object that represents the JPEG codec.
        myImageCodecInfo = GetEncoderInfo("image/jpeg");

        // Create an Encoder object based on the GUID

        // for the Quality parameter category.
        myEncoder = Encoder.Quality;

        // Create an EncoderParameters object.

        // An EncoderParameters object has an array of EncoderParameter

        // objects. In this case, there is only one

        // EncoderParameter object in the array.
        myEncoderParameters = new EncoderParameters(1);

        // Save the bitmap as a JPEG file with quality level 25.
        myEncoderParameter = new EncoderParameter(myEncoder, 25L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters);

        // Save the bitmap as a JPEG file with quality level 50.
        myEncoderParameter = new EncoderParameter(myEncoder, 50L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters);

        // Save the bitmap as a JPEG file with quality level 75.
        myEncoderParameter = new EncoderParameter(myEncoder, 75L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters);
    }
    private static ImageCodecInfo GetEncoderInfo(String mimeType)
    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for(j = 0; j < encoders.Length; ++j)
        {
            if(encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章