Image.Save 方法

定義

將這個影像以指定的格式儲存至指定的資料流。Saves this image to the specified stream in the specified format.

多載

Save(String, ImageCodecInfo, EncoderParameters)

使用指定的編碼器和影像編碼器參數,將此 Image 儲存至指定的檔案。Saves this Image to the specified file, with the specified encoder and image-encoder parameters.

Save(Stream, ImageCodecInfo, EncoderParameters)

使用指定的編碼器和影像編碼器參數,將此影像儲存至指定的資料流。Saves this image to the specified stream, with the specified encoder and image encoder parameters.

Save(String, ImageFormat)

將這個 Image 以指定的格式儲存至指定的檔案。Saves this Image to the specified file in the specified format.

Save(Stream, ImageFormat)

將這個影像以指定的格式儲存至指定的資料流。Saves this image to the specified stream in the specified format.

Save(String)

儲存這個 Image 至指定的檔案或資料流。Saves this Image to the specified file or stream.

Save(String, ImageCodecInfo, EncoderParameters)

使用指定的編碼器和影像編碼器參數,將此 Image 儲存至指定的檔案。Saves this Image to the specified file, with the specified encoder and image-encoder parameters.

public:
 void Save(System::String ^ filename, System::Drawing::Imaging::ImageCodecInfo ^ encoder, System::Drawing::Imaging::EncoderParameters ^ encoderParams);
public void Save (string filename, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters encoderParams);
member this.Save : string * System.Drawing.Imaging.ImageCodecInfo * System.Drawing.Imaging.EncoderParameters -> unit
Public Sub Save (filename As String, encoder As ImageCodecInfo, encoderParams As EncoderParameters)

參數

filename
String

字串,包含要儲存這個 Image 之目的檔案的名稱。A string that contains the name of the file to which to save this Image.

encoder
ImageCodecInfo

這個 ImageCodecInfoImageThe ImageCodecInfo for this Image.

encoderParams
EncoderParameters

要用於這個 EncoderParametersImageAn EncoderParameters to use for this Image.

例外狀況

filenameencodernull.filename or encoder is null.

使用了錯誤的影像格式儲存影像。The image was saved with the wrong image format.

-或--or-

影像已儲存至建立它時所使用的檔案中。The image was saved to the same file it was created from.

範例

下列範例會從 BMP 檔案建立 Bitmap 物件。The following example creates a Bitmap object from a BMP file. 此程式碼會將點陣圖儲存至三個 JPEG 檔案,每個檔案各有不同的品質等級。The code saves the bitmap to three JPEG files, each with a different quality level.

#using <System.Drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Drawing::Imaging;
static ImageCodecInfo^ GetEncoderInfo( ImageFormat^ format );
int main()
{
   Bitmap^ myBitmap;
   ImageCodecInfo^ myImageCodecInfo;
   Encoder^ myEncoder;
   EncoderParameter^ myEncoderParameter;
   EncoderParameters^ myEncoderParameters;
   
   // Create a Bitmap object based on a BMP file.
   myBitmap = gcnew Bitmap( "Shapes.bmp" );
   
   // Get an ImageCodecInfo object that represents the JPEG codec.
   myImageCodecInfo = GetEncoderInfo( ImageFormat->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 = gcnew EncoderParameters( 1 );
   
   // Save the bitmap as a JPEG file with quality level 25.
   myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(25) );
   myEncoderParameters->Param[ 0 ] = myEncoderParameter;
   myBitmap->Save( "Shapes025.jpg", myImageCodecInfo, myEncoderParameters );
   
   // Save the bitmap as a JPEG file with quality level 50.
   myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(50) );
   myEncoderParameters->Param[ 0 ] = myEncoderParameter;
   myBitmap->Save( "Shapes050.jpg", myImageCodecInfo, myEncoderParameters );
   
   // Save the bitmap as a JPEG file with quality level 75.
   myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(75) );
   myEncoderParameters->Param[ 0 ] = myEncoderParameter;
   myBitmap->Save( "Shapes075.jpg", myImageCodecInfo, myEncoderParameters );
}

static ImageCodecInfo^ GetEncoderInfo( ImageFormat^ format )
{
   int j;
   array<ImageCodecInfo^>^encoders;
   encoders = ImageCodecInfo::GetImageEncoders();
   for ( j = 0; j < encoders->Length; ++j )
   {
      if ( encoders[ j ]->FormatID == format->Guid)
            return encoders[ j ];

   }
   return nullptr;
}

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;
    }
}
Imports System.Drawing
Imports System.Drawing.Imaging


Class Example_SetJPEGQuality

    Public Shared Sub Main()
        Dim myBitmap As Bitmap
        Dim myImageCodecInfo As ImageCodecInfo
        Dim myEncoder As Encoder
        Dim myEncoderParameter As EncoderParameter
        Dim myEncoderParameters As EncoderParameters

        ' 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(ImageFormat.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, CType(25L, Int32))
        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, CType(50L, Int32))
        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, CType(75L, Int32))
        myEncoderParameters.Param(0) = myEncoderParameter
        myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters)

    End Sub

    Private Shared Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo
        Dim j As Integer
        Dim encoders() As ImageCodecInfo
        encoders = ImageCodecInfo.GetImageEncoders()

        j = 0
        While j < encoders.Length
            If encoders(j).FormatID = format.Guid Then
                Return encoders(j)
            End If
            j += 1
        End While
        Return Nothing

    End Function 'GetEncoderInfo
End Class

備註

不允許將影像儲存到其所建立的相同檔案,而且會擲回例外狀況。Saving the image to the same file it was constructed from is not allowed and throws an exception.

另請參閱

Save(Stream, ImageCodecInfo, EncoderParameters)

使用指定的編碼器和影像編碼器參數,將此影像儲存至指定的資料流。Saves this image to the specified stream, with the specified encoder and image encoder parameters.

public:
 void Save(System::IO::Stream ^ stream, System::Drawing::Imaging::ImageCodecInfo ^ encoder, System::Drawing::Imaging::EncoderParameters ^ encoderParams);
public void Save (System.IO.Stream stream, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters encoderParams);
member this.Save : System.IO.Stream * System.Drawing.Imaging.ImageCodecInfo * System.Drawing.Imaging.EncoderParameters -> unit

參數

stream
Stream

Stream,其中將會儲存影像。The Stream where the image will be saved.

encoder
ImageCodecInfo

這個 ImageCodecInfoImageThe ImageCodecInfo for this Image.

encoderParams
EncoderParameters

EncoderParameters,指定由影像編碼器使用的參數。An EncoderParameters that specifies parameters used by the image encoder.

例外狀況

streamnullstream is null.

使用了錯誤的影像格式儲存影像。The image was saved with the wrong image format.

備註

請勿將影像儲存到用來建立映射的相同資料流程。Do not save an image to the same stream that was used to construct the image. 這麼做可能會損毀資料流程。Doing so might damage the stream.

映射必須儲存至資料流程,其位移為零。The image must be saved to the stream at an offset of zero. 如果在儲存映射之前,已將任何其他資料寫入資料流程,資料流程中的影像資料將會損毀。If any additional data has been written to the stream before saving the image, the image data in the stream will be corrupted.

Save(String, ImageFormat)

將這個 Image 以指定的格式儲存至指定的檔案。Saves this Image to the specified file in the specified format.

public:
 void Save(System::String ^ filename, System::Drawing::Imaging::ImageFormat ^ format);
public void Save (string filename, System.Drawing.Imaging.ImageFormat format);
member this.Save : string * System.Drawing.Imaging.ImageFormat -> unit
Public Sub Save (filename As String, format As ImageFormat)

參數

filename
String

字串,包含要儲存這個 Image 之目的檔案的名稱。A string that contains the name of the file to which to save this Image.

format
ImageFormat

這個 ImageFormatImageThe ImageFormat for this Image.

例外狀況

filenameformatnull.filename or format is null.

使用了錯誤的影像格式儲存影像。The image was saved with the wrong image format.

-或--or-

影像已儲存至建立它時所使用的檔案中。The image was saved to the same file it was created from.

範例

下列程式碼範例示範如何從類型中建立點陣圖,以及如何使用 Save 方法。The following code example demonstrates how to construct a bitmap from a type, and how to use the Save method. 若要執行此範例,請將程式碼貼入 Windows Form。To run this example, paste the code into a Windows Form. 處理表單的 Paint 事件,並呼叫 ConstructFromResourceSaveAsGif 方法,傳遞 e 做為 PaintEventArgsHandle the form's Paint event, and call the ConstructFromResourceSaveAsGif method, passing e as PaintEventArgs

private:
    void ConstructFromResourceSaveAsGif(PaintEventArgs^ e)
    {
        // Construct a bitmap from the button image resource.
        Bitmap^ bmp1 = gcnew Bitmap(Button::typeid, "Button.bmp");
        String^ savePath =  
            Environment::GetEnvironmentVariable("TEMP") + "\\Button.bmp";

        try
        {
            // Save the image as a GIF.
            bmp1->Save(savePath, System::Drawing::Imaging::ImageFormat::Gif);
        }
        catch (IOException^)
        {
            // Carry on regardless
        }

        // Construct a new image from the GIF file.
        Bitmap^ bmp2 = nullptr;
        if (File::Exists(savePath))
        {
            bmp2 = gcnew Bitmap(savePath);
        }

        // Draw the two images.
        e->Graphics->DrawImage(bmp1, Point(10, 10));

        // If bmp1 did not save to disk, bmp2 may be null
        if (bmp2 != nullptr)
        {
            e->Graphics->DrawImage(bmp2, Point(10, 40));
        }

        // Dispose of the image files.
        delete bmp1;
        if (bmp2 != nullptr)
        {
            delete bmp2;
        }
    }
private void ConstructFromResourceSaveAsGif(PaintEventArgs e)
{

    // Construct a bitmap from the button image resource.
    Bitmap bmp1 = new Bitmap(typeof(Button), "Button.bmp");

    // Save the image as a GIF.
    bmp1.Save("c:\\button.gif", System.Drawing.Imaging.ImageFormat.Gif);

    // Construct a new image from the GIF file.
    Bitmap bmp2 = new Bitmap("c:\\button.gif");

    // Draw the two images.
    e.Graphics.DrawImage(bmp1, new Point(10, 10));
    e.Graphics.DrawImage(bmp2, new Point(10, 40));

    // Dispose of the image files.
    bmp1.Dispose();
    bmp2.Dispose();
}
Private Sub ConstructFromResourceSaveAsGif(ByVal e As PaintEventArgs)

    ' Construct a bitmap from the button image resource.
    Dim bmp1 As New Bitmap(GetType(Button), "Button.bmp")

    ' Save the image as a GIF.
    bmp1.Save("c:\button.gif", System.Drawing.Imaging.ImageFormat.Gif)

    ' Construct a new image from the GIF file.
    Dim bmp2 As New Bitmap("c:\button.gif")

    ' Draw the two images.
    e.Graphics.DrawImage(bmp1, New Point(10, 10))
    e.Graphics.DrawImage(bmp2, New Point(10, 40))

    ' Dispose of the image files.
    bmp1.Dispose()
    bmp2.Dispose()
End Sub

Save(Stream, ImageFormat)

將這個影像以指定的格式儲存至指定的資料流。Saves this image to the specified stream in the specified format.

public:
 void Save(System::IO::Stream ^ stream, System::Drawing::Imaging::ImageFormat ^ format);
public void Save (System.IO.Stream stream, System.Drawing.Imaging.ImageFormat format);
member this.Save : System.IO.Stream * System.Drawing.Imaging.ImageFormat -> unit

參數

stream
Stream

Stream,其中將會儲存影像。The Stream where the image will be saved.

format
ImageFormat

ImageFormat,指定儲存之影像的格式。An ImageFormat that specifies the format of the saved image.

例外狀況

streamformatnullstream or format is null.

使用了錯誤的影像格式儲存影像。The image was saved with the wrong image format

備註

您應該避免將影像儲存到用來進行結構的資料流程。You should avoid saving an image to the same stream that was used to construct it. 這麼做可能會損毀資料流程。Doing so might damage the stream.

映射必須儲存至資料流程,其位移為零。The image must be saved to the stream at an offset of zero. 如果在儲存映射之前,已將任何其他資料寫入資料流程,資料流程中的影像資料將會損毀。If any additional data has been written to the stream before saving the image, the image data in the stream will be corrupted.

Save(String)

儲存這個 Image 至指定的檔案或資料流。Saves this Image to the specified file or stream.

public:
 void Save(System::String ^ filename);
public void Save (string filename);
member this.Save : string -> unit
Public Sub Save (filename As String)

參數

filename
String

字串,包含要儲存這個 Image 之目的檔案的名稱。A string that contains the name of the file to which to save this Image.

例外狀況

filenamenull.filename is null.

使用了錯誤的影像格式儲存影像。The image was saved with the wrong image format.

-或--or-

影像已儲存至建立它時所使用的檔案中。The image was saved to the same file it was created from.

範例

下列程式碼範例示範如何呼叫 Save 方法。The following code example demonstrates how to call the Save method. 這個範例是設計來與 Windows Forms 搭配使用。This example is designed to be used with Windows Forms. 建立包含名為 Button5之按鈕的表單。Create a form that contains a button named Button5. 將程式碼貼到表單中,並將方法與按鈕的 Click 事件產生關聯。Paste the code into the form, and associate the method with the button's Click event.

private:
   void Button5_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      try
      {
         if ( image1 != nullptr )
         {
            image1->Save( "c:\\myBitmap.bmp" );
            Button5->Text = "Saved file.";
         }
      }
      catch ( Exception^ ) 
      {
         MessageBox::Show( "There was a problem saving the file."
         "Check the file permissions." );
      }
   }
private void Button5_Click(System.Object sender, System.EventArgs e)
{
    try
    {
        if (image1 != null)
        {
            image1.Save("c:\\myBitmap.bmp");
            Button5.Text = "Saved file.";
        }
    }
    catch(Exception)
    {
        MessageBox.Show("There was a problem saving the file." +
            "Check the file permissions.");
    }
}
Private Sub Button5_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button5.Click
    Try
        If (image1 IsNot Nothing) Then
            image1.Save("c:\myBitmap.bmp")
            Button5.Text = "Saved file."
        End If
    Catch ex As Exception
        MessageBox.Show("There was a problem saving the file." _
        & "Check the file permissions.")
    End Try

End Sub

備註

如果影像的檔案格式沒有任何編碼器,則會使用可移植網狀圖形(PNG)編碼器。If no encoder exists for the file format of the image, the Portable Network Graphics (PNG) encoder is used. 當您使用 Save 方法將圖形影像儲存為 Windows 中繼檔格式(WMF)或增強型元檔案格式(EMF)檔案時,產生的檔案會儲存為便攜網狀圖形(PNG)檔案。When you use the Save method to save a graphic image as a Windows Metafile Format (WMF) or Enhanced Metafile Format (EMF) file, the resulting file is saved as a Portable Network Graphics (PNG) file. 之所以會發生這種行為,是因為 .NET Framework.NET FrameworkGDI+GDI+ 元件沒有可用來將檔案儲存為 wmf 或 .emf 檔案的編碼器。This behavior occurs because the GDI+GDI+ component of the .NET Framework.NET Framework does not have an encoder that you can use to save files as .wmf or .emf files.

不允許將影像儲存到其所建立的相同檔案,而且會擲回例外狀況。Saving the image to the same file it was constructed from is not allowed and throws an exception.

適用於