Encoder クラス
アセンブリ: System.Drawing (system.drawing.dll 内)


イメージ エンコーダにパラメータを渡すと、そのパラメータは EncoderParameter オブジェクト内でカプセル化されます。EncoderParameter オブジェクトのプライベート フィールドの 1 つに、パラメータ カテゴリを指定する GUID があります。イメージ エンコーダが設定されている GDI+ は、Transformation、Quality、LuminanceTable、ChrominanceTable、Compression、ColorDepth、および SaveFlag のカテゴリに属するパラメータを受信します。

System.Drawing.Imaging.Encoder


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Encoder クラス
アセンブリ: mscorlib (mscorlib.dll 内)


エンコーディングは、文字のセットをバイト シーケンスに変換するプロセスです。デコードはその逆になります。エンコードされたバイト シーケンスを文字のセットに変換するプロセスです。
Encoder では、複数のブロックにまたがる文字シーケンスを正確にエンコードできるように、GetBytes への連続する呼び出し間でステータス情報を維持します。また、Encoder は、データ ブロックの末尾で後続文字を保持し、その後続文字を次のエンコード操作に使用します。たとえば、データ ブロックが上位サロゲートで終了し、対応する下位サロゲートが次のデータ ブロックに含まれる場合があります。したがって、Decoder クラスと Encoder クラスは、ネットワーク伝送やファイル操作に役立ちます。これは、ネットワーク伝送やファイル操作では、完全なデータ ストリームではなくデータのブロックを処理することが多いためです。
GetByteCount メソッドは、Unicode 文字のセットをエンコードした結果得られるバイト数を確認します。実際のエンコードは、GetBytes メソッドによって実行されます。
このクラスの実装のインスタンスを取得するには、Encoding 実装の GetEncoder メソッドを使用します。
バージョンの考慮事項Decoder オブジェクトまたは Encoder オブジェクトは、変換演算の実行時にシリアル化できます。オブジェクトが .NET Framework の同じバージョンで逆シリアル化された場合、オブジェクトの状態は保持されますが、別のバージョンで逆シリアル化された場合には、オブジェクトの状態は失われます。

次のコード例は、指定したエンコーディングを使用して Unicode 文字の配列をバイトのブロックに変換する方法を示しています。比較のため、文字配列はまず UTF7Encoding を使ってエンコードされます。次に、Encoder を使ってエンコードされます。
Imports System Imports System.Text Imports Microsoft.VisualBasic Imports Microsoft.VisualBasic.Strings Class EncoderTest Public Shared Sub Main() ' Unicode characters. ' ChrW(35) = # ' ChrW(37) = % ' ChrW(928) = Pi ' ChrW(931) = Sigma Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)} ' Encode characters using an Encoding object. Dim encoding As Encoding = Encoding.UTF7 Console.WriteLine( _ "Using Encoding" & _ ControlChars.NewLine & _ "--------------" _ ) ' Encode complete array for comparison. Dim allCharactersFromEncoding As Byte() = encoding.GetBytes(chars) Console.WriteLine("All characters encoded:") ShowArray(allCharactersFromEncoding) ' Encode characters, one-by-one. ' The Encoding object will NOT maintain state between calls. Dim firstchar As Byte() = encoding.GetBytes(chars, 0, 1) Console.WriteLine("First character:") ShowArray(firstchar) Dim secondchar As Byte() = encoding.GetBytes(chars, 1, 1) Console.WriteLine("Second character:") ShowArray(secondchar) Dim thirdchar As Byte() = encoding.GetBytes(chars, 2, 1) Console.WriteLine("Third character:") ShowArray(thirdchar) Dim fourthchar As Byte() = encoding.GetBytes(chars, 3, 1) Console.WriteLine("Fourth character:") ShowArray(fourthchar) ' Now, encode characters using an Encoder object. Dim encoder As Encoder = encoding.GetEncoder() Console.WriteLine( _ "Using Encoder" & _ ControlChars.NewLine & _ "-------------" _ ) ' Encode complete array for comparison. Dim allCharactersFromEncoder( _ encoder.GetByteCount(chars, 0, chars.Length, True) _ ) As Byte encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, True) Console.WriteLine("All characters encoded:") ShowArray(allCharactersFromEncoder) ' Do not flush state; i.e. maintain state between calls. Dim bFlushState As Boolean = False ' Encode characters one-by-one. ' By maintaining state, the Encoder will not store extra bytes in the output. Dim firstcharNoFlush( _ encoder.GetByteCount(chars, 0, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState) Console.WriteLine("First character:") ShowArray(firstcharNoFlush) Dim secondcharNoFlush( _ encoder.GetByteCount(chars, 1, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState) Console.WriteLine("Second character:") ShowArray(secondcharNoFlush) Dim thirdcharNoFlush( _ encoder.GetByteCount(chars, 2, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState) Console.WriteLine("Third character:") ShowArray(thirdcharNoFlush) ' Must flush state on last call to GetBytes(). bFlushState = True Dim fourthcharNoFlush( _ encoder.GetByteCount(chars, 3, 1, bFlushState) _ ) As Byte encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState) Console.WriteLine("Fourth character:") ShowArray(fourthcharNoFlush) End Sub 'Main Public Shared Sub ShowArray(theArray As Array) Dim o As Object For Each o In theArray Console.Write("[{0}]", o) Next o Console.WriteLine(ControlChars.NewLine) End Sub 'ShowArray End Class 'EncoderTest
using System; using System.Text; class EncoderTest { public static void Main() { // The characters to encode. Char[] chars = new Char[] { '\u0023', // # '\u0025', // % '\u03a0', // Pi '\u03a3' // Sigma }; // Encode characters using an Encoding object. Encoding encoding = Encoding.UTF7; Console.WriteLine("Using Encoding\n--------------"); // Encode complete array for comparison. Byte[] allCharactersFromEncoding = encoding.GetBytes(chars); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoding); // Encode characters, one-by-one. // The Encoding object will NOT maintain state between calls. Byte[] firstchar = encoding.GetBytes(chars, 0, 1); Console.WriteLine("First character:"); ShowArray(firstchar); Byte[] secondchar = encoding.GetBytes(chars, 1, 1); Console.WriteLine("Second character:"); ShowArray(secondchar); Byte[] thirdchar = encoding.GetBytes(chars, 2, 1); Console.WriteLine("Third character:"); ShowArray(thirdchar); Byte[] fourthchar = encoding.GetBytes(chars, 3, 1); Console.WriteLine("Fourth character:"); ShowArray(fourthchar); // Now, encode characters using an Encoder object. Encoder encoder = encoding.GetEncoder(); Console.WriteLine("Using Encoder\n-------------"); // Encode complete array for comparison. Byte[] allCharactersFromEncoder = new Byte[encoder.GetByteCount(chars, 0, chars.Length, true)]; encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, true); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoder); // Do not flush state; i.e. maintain state between calls. bool bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store extra bytes in the output. Byte[] firstcharNoFlush = new Byte[encoder.GetByteCount(chars, 0, 1, bFlushState)]; encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState); Console.WriteLine("First character:"); ShowArray(firstcharNoFlush); Byte[] secondcharNoFlush = new Byte[encoder.GetByteCount(chars, 1, 1, bFlushState)]; encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState); Console.WriteLine("Second character:"); ShowArray(secondcharNoFlush); Byte[] thirdcharNoFlush = new Byte[encoder.GetByteCount(chars, 2, 1, bFlushState)]; encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState); Console.WriteLine("Third character:"); ShowArray(thirdcharNoFlush); // Must flush state on last call to GetBytes(). bFlushState = true; Byte[] fourthcharNoFlush = new Byte[encoder.GetByteCount(chars, 3, 1, bFlushState)]; encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState); Console.WriteLine("Fourth character:"); ShowArray(fourthcharNoFlush); } public static void ShowArray(Array theArray) { foreach (Object o in theArray) { Console.Write("[{0}]", o); } Console.WriteLine("\n"); } }
using namespace System; using namespace System::Text; using namespace System::Collections; void ShowArray( Array^ theArray ) { IEnumerator^ myEnum = theArray->GetEnumerator(); while ( myEnum->MoveNext() ) { Object^ o = safe_cast<Object^>(myEnum->Current); Console::Write( "[{0}]", o ); } Console::WriteLine( "\n" ); } int main() { // The characters to encode. // Pi // Sigma array<Char>^chars = {L'\u03a0',L'\u03a3',L'\u03a6',L'\u03a9'}; // Encode characters using an Encoding Object*. Encoding^ encoding = Encoding::UTF7; Console::WriteLine( "Using Encoding\n--------------" ); // Encode complete array for comparison. array<Byte>^allCharactersFromEncoding = encoding->GetBytes( chars ); Console::WriteLine( "All characters encoded:" ); ShowArray( allCharactersFromEncoding ); // Encode characters, one-by-one. // The Encoding Object* will NOT maintain state between calls. array<Byte>^firstchar = encoding->GetBytes( chars, 0, 1 ); Console::WriteLine( "First character:" ); ShowArray( firstchar ); array<Byte>^secondchar = encoding->GetBytes( chars, 1, 1 ); Console::WriteLine( "Second character:" ); ShowArray( secondchar ); array<Byte>^thirdchar = encoding->GetBytes( chars, 2, 1 ); Console::WriteLine( "Third character:" ); ShowArray( thirdchar ); array<Byte>^fourthchar = encoding->GetBytes( chars, 3, 1 ); Console::WriteLine( "Fourth character:" ); ShowArray( fourthchar ); // Now, encode characters using an Encoder Object*. Encoder^ encoder = encoding->GetEncoder(); Console::WriteLine( "Using Encoder\n-------------" ); // Encode complete array for comparison. array<Byte>^allCharactersFromEncoder = gcnew array<Byte>(encoder->GetByteCount( chars, 0, chars->Length, true )); encoder->GetBytes( chars, 0, chars->Length, allCharactersFromEncoder, 0, true ); Console::WriteLine( "All characters encoded:" ); ShowArray( allCharactersFromEncoder ); // Do not flush state; i.e. maintain state between calls. bool bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store extra bytes in the output. array<Byte>^firstcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 0, 1, bFlushState )); encoder->GetBytes( chars, 0, 1, firstcharNoFlush, 0, bFlushState ); Console::WriteLine( "First character:" ); ShowArray( firstcharNoFlush ); array<Byte>^secondcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 1, 1, bFlushState )); encoder->GetBytes( chars, 1, 1, secondcharNoFlush, 0, bFlushState ); Console::WriteLine( "Second character:" ); ShowArray( secondcharNoFlush ); array<Byte>^thirdcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 2, 1, bFlushState )); encoder->GetBytes( chars, 2, 1, thirdcharNoFlush, 0, bFlushState ); Console::WriteLine( "Third character:" ); ShowArray( thirdcharNoFlush ); // Must flush state on last call to GetBytes(). bFlushState = true; array<Byte>^fourthcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 3, 1, bFlushState )); encoder->GetBytes( chars, 3, 1, fourthcharNoFlush, 0, bFlushState ); Console::WriteLine( "Fourth character:" ); ShowArray( fourthcharNoFlush ); }
import System.*; import System.Text.*; class EncoderTest { public static void main(String[] args) { // The characters to encode. char chars[] = new char[] { '\u0023', // # '\u0025', // % '\u03a0', // Pi '\u03a3' // Sigma }; // Encode characters using an Encoding object. Encoding encoding = Encoding.get_UTF7(); Console.WriteLine("Using Encoding\n--------------"); // Encode complete array for comparison. ubyte allCharactersFromEncoding[] = encoding.GetBytes(chars); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoding); // Encode characters, one-by-one. // The Encoding object will NOT maintain state between calls. ubyte firstchar[] = encoding.GetBytes(chars, 0, 1); Console.WriteLine("First character:"); ShowArray(firstchar); ubyte secondchar[] = encoding.GetBytes(chars, 1, 1); Console.WriteLine("Second character:"); ShowArray(secondchar); ubyte thirdchar[] = encoding.GetBytes(chars, 2, 1); Console.WriteLine("Third character:"); ShowArray(thirdchar); ubyte fourthchar[] = encoding.GetBytes(chars, 3, 1); Console.WriteLine("Fourth character:"); ShowArray(fourthchar); // Now, encode characters using an Encoder object. Encoder encoder = encoding.GetEncoder(); Console.WriteLine("Using Encoder\n-------------"); // Encode complete array for comparison. ubyte allCharactersFromEncoder[] = new ubyte[encoder.GetByteCount(chars, 0, chars.length, true)]; encoder.GetBytes(chars, 0, chars.length, allCharactersFromEncoder, 0, true); Console.WriteLine("All characters encoded:"); ShowArray(allCharactersFromEncoder); // Do not flush state; i.e. maintain state between calls. boolean bFlushState = false; // Encode characters one-by-one. // By maintaining state, the Encoder will not store // extra bytes in the output. ubyte firstcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 0, 1, bFlushState)]; encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState); Console.WriteLine("First character:"); ShowArray(firstcharNoFlush); ubyte secondcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 1, 1, bFlushState)]; encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState); Console.WriteLine("Second character:"); ShowArray(secondcharNoFlush); ubyte thirdcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 2, 1, bFlushState)]; encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState); Console.WriteLine("Third character:"); ShowArray(thirdcharNoFlush); // Must flush state on last call to GetBytes(). bFlushState = true; ubyte fourthcharNoFlush[] = new ubyte[encoder.GetByteCount(chars, 3, 1, bFlushState)]; encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState); Console.WriteLine("Fourth character:"); ShowArray(fourthcharNoFlush); } //main public static void ShowArray(Array theArray) { Object o = null; for(int iCtr = 0; iCtr < theArray.get_Length(); iCtr++) { o = theArray.get_Item(iCtr); Console.Write("[{0}]", o); } Console.WriteLine("\n"); } //ShowArray } //EncoderTest

System.Text.Encoder


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- Encoder クラスのページへのリンク