Image.Save 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將此影像以指定格式儲存到指定的串流中。
多載
| 名稱 | Description |
|---|---|
| Save(String, ImageCodecInfo, EncoderParameters) |
將此 Image 資料儲存到指定的檔案,並包含指定的編碼器與影像編碼器參數。 |
| Save(Stream, ImageCodecInfo, EncoderParameters) |
將此影像儲存到指定的串流中,並使用指定的編碼器與影像編碼器參數。 |
| Save(String, ImageFormat) |
將這些資料 Image 以指定格式儲存到指定的檔案中。 |
| Save(Stream, ImageFormat) |
將此影像以指定格式儲存到指定的串流中。 |
| Save(String) |
將這些資料 Image 儲存到指定的檔案或串流中。 |
Save(String, ImageCodecInfo, EncoderParameters)
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
將此 Image 資料儲存到指定的檔案,並包含指定的編碼器與影像編碼器參數。
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);
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)
參數
- encoder
- ImageCodecInfo
- encoderParams
- EncoderParameters
用於 EncoderParameters 此 Image。
例外狀況
filename 或 encoder 為 null。
範例
以下範例將從 BMP 檔案建立 Bitmap 一個物件。 程式碼會將點陣圖儲存為三個 JPEG 檔案,每個檔案的品質等級不同。
#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
備註
不允許將映像檔存到原本建構的同一檔案,並會拋出例外。
另請參閱
- 操作指南:設定 JPEG 壓縮層級
適用於
Save(Stream, ImageCodecInfo, EncoderParameters)
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
將此影像儲存到指定的串流中,並使用指定的編碼器與影像編碼器參數。
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);
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
Public Sub Save (stream As Stream, encoder As ImageCodecInfo, encoderParams As EncoderParameters)
參數
- encoder
- ImageCodecInfo
- encoderParams
- EncoderParameters
一個 EncoderParameters 指定影像編碼器所使用的參數的圖。
例外狀況
stream 是 null。
圖片儲存時格式錯誤。
備註
不要將影像儲存到與建構影像相同的串流中。 這樣做可能會損壞溪流。
影像必須以偏移為零的狀態儲存到串流中。 如果在儲存影像前已寫入任何額外資料,串流中的影像資料將會被損壞。
適用於
Save(String, ImageFormat)
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
將這些資料 Image 以指定格式儲存到指定的檔案中。
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)
參數
- format
- ImageFormat
例外狀況
filename 或 format 為 null。
範例
以下程式碼範例示範如何從型別構造位圖,以及如何使用此 Save 方法。 要執行這個範例,請將程式碼貼到 Windows 表單中。 處理表單事件 Paint ,並呼叫該 ConstructFromResourceSaveAsGif 方法,傳遞 e 為 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)
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
將此影像以指定格式儲存到指定的串流中。
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
Public Sub Save (stream As Stream, format As ImageFormat)
參數
- format
- ImageFormat
一個 ImageFormat 指定儲存影像格式的
例外狀況
stream 或 format 為 null。
圖片儲存時格式錯誤。
備註
你應該避免將圖片儲存到與建構圖片相同的串流。 這樣做可能會損壞溪流。
影像必須以偏移為零的狀態儲存到串流中。 如果在儲存影像前已寫入任何額外資料,串流中的影像資料將會被損壞。
適用於
Save(String)
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
- 來源:
- Image.cs
將這些資料 Image 儲存到指定的檔案或串流中。
public:
void Save(System::String ^ filename);
public void Save(string filename);
member this.Save : string -> unit
Public Sub Save (filename As String)
參數
例外狀況
filename 是 null。
範例
以下程式碼範例示範如何呼叫此 Save 方法。 此範例設計用於 Windows 表單。 建立一個包含名為 Button5的按鈕的表單。 把程式碼貼到表單裡,然後把方法和按鈕的 Click 事件關聯起來。
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)編碼器。 當你使用此 Save 方法將圖像儲存為 Windows Metafile 格式(WMF)或增強型Metafile Format(EMF)檔案時,產生的檔案會儲存為可攜式網路圖形(PNG)檔案。 此行為是因為 .NET Framework 的 GDI+ 元件沒有編碼器,無法將檔案儲存為 .wmf 或 .emf 檔案。
不允許將映像檔存到原本建構的同一檔案,並會拋出例外。