AviCompressor.CompressorData Property

AviCompressorのデータを返す、または設定します。

構文

[VB.NET]
Public CompressorData As Byte()
[C#]
public byte[] CompressorData;

備考

返されるデータはコーデックの状態を保存することだけに使用することが推奨されます。配列のデータは変更 されません。不整合なデータがコーデックに渡されるとエラーを返し、コーデックのデータが適合しなくなります。

サンプル

次の例ではどのようにコーデックデータをバイナリファイルへ保存、またはそこからロードする方法を紹介しています。現在使用中のコーデックはグローバル宣言しなければなりません。ローカル宣言した場合、サブ関数の終了後、メモリーから設定が消去され失われてしまいます。完全なサンプルはコーデックのプロパティを保存するプログラマーズガイド>コーデックのプロパティを保存する内の例を参照してください。

コンボボックスで選択されたコーデックからのデータを保存する

[VB.NET]
Private Sub cmdSaveCodecData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  Handles cmdSaveCodecData.Click
     If edtConfigFile.Text <> "" Then
         Try
             Dim Filestream As New System.IO.FileStream
        (edtConfigFile.Text, System.IO.FileMode.Create, System.IO.FileAccess.Write)

             ' データのライターを作成する
             Dim BinWriter As New System.IO.BinaryWriter(Filestream)

             ' Test.dataにデータを書き込む
             Dim aviComp As AviCompressor
             aviComp = CType(CodecBox.SelectedItem(), AviCompressor)

             BinWriter.Write(aviComp.ToString())
             BinWriter.Write(aviComp.CompressorDataSize)
             BinWriter.Write(aviComp.CompressorData)

             BinWriter.Close()
             Filestream.Close()

         catch Ex As System.Exception
             MsgBox(Ex.Message, MsgBoxStyle.Critical, "Write error")
         End Try
     End If
End Sub
[C#]
private void cmdSaveCodecData_Click(object sender, System.EventArgs e)
{
     if (edtConfigFile.Text != "")
     {
         try
         {
             System.IO.FileStream Filestream = new System.IO.FileStream
        (edtConfigFile.Text, System.IO.FileMode.Create, System.IO.FileAccess.Write);

             // データのライターを作成する
             System.IO.BinaryWriter BinWriter = new System.IO.BinaryWriter(Filestream);

             // Test.dataにデータを書き込む
             AviCompressor aviComp = null;
             aviComp = ((AviCompressor)(CodecBox.SelectedItem));

             BinWriter.Write(aviComp.ToString());
             BinWriter.Write(aviComp.CompressorDataSize);
             BinWriter.Write(aviComp.CompressorData);

             BinWriter.Close();
             Filestream.Close();
           }
         catch (Exception Ex)
         {
             MessageBox.Show(Ex.Message, "Write error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
}

以前に保存されたデータをロードしてコーデックに割り当てます。

[VB.NET]
Private Sub cmdLoadCodecData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
       Handles cmdLoadCodecData.Click
     If edtConfigFile.Text <> "" Then
         Try
             ' データのライターを作成する
             Dim Filestrem As New System.IO.FileStream
      (edtConfigFile.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read)
             Dim BinReader As New System.IO.BinaryReader(Filestrem)

             Dim CodecName As String
             Dim Codec As AviCompressor
             Dim CodecFound As Boolean

             ' コーデックコンフィギュレーションファイルよりコーデック名を取得
             CodecName = BinReader.ReadString()

             ' コンボボックスよりこのコーデックを検索
             CodecFound = False
             For Each item As AviCompressor In CodecBox.Items
                 If item.ToString() = CodecName Then
                     CodecBox.SelectedItem = item
                     Codec = item
                     CodecFound = True
                 End If
             Next

             If CodecFound = True Then
                 Dim codecDataLen As Integer = BinReader.ReadInt32()
                 ' コーデックにコンフィギュレーションデータを割り当てる
                 Codec.CompressorData = BinReader.ReadBytes(codecDataLen)
             Else
                 ' コーデックが見つからない場合、エラーメッセージを表示
                 MsgBox("The codec " + CodecName + " was not found!",
               MsgBoxStyle.Information, "Load codec configuration")
             End If
             BinReader.Close()
             Filestrem.Close()

        catch Ex As System.Exception
             MsgBox(Ex.Message, MsgBoxStyle.Critical, "Read error")
         End Try
     End If
End Sub
[C#]
private void cmdLoadCodecData_Click(object sender,System.EventArgs e)
{
     if (edtConfigFile.Text != "")
     {
         Try
         {
             // データのライターを作成する
             System.IO.FileStream Filestrem = new System.IO.FileStream
         (edtConfigFile.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read);
             System.IO.BinaryReader BinReader = new System.IO.BinaryReader(Filestrem);

             string CodecName = "";
             AviCompressor Codec = null;
             bool CodecFound = false;

             // コーデックコンフィギュレーションファイルよりコーデック名を取得
             CodecName = BinReader.ReadString();

             // コンボボックスよりこのコーデックを検索
             CodecFound = false;
             foreach (AviCompressor item in CodecBox.Items)
             {
                 if (item.ToString() == CodecName)
                 {
                     CodecBox.SelectedItem = item;
                     Codec = item;
                     CodecFound = true;
                 }
             }

             if (CodecFound == true)
             {
                 int codecDataLen = BinReader.ReadInt32();
                 // コーデックにコンフィギュレーションデータを割り当てる
                 Codec.CompressorData = BinReader.ReadBytes(codecDataLen);
             }
             else
             {
                 // コーデックが見つからない場合、エラーメッセージを表示
                 MessageBox.Show("The codec " + CodecName + " was not found!", 
        "Load codec configuration", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             BinReader.Close();
             Filestrem.Close();

         }
         catch (Exception Ex)
         {
             MessageBox.Show(Ex.Message, "Read error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
}