Sample: |
|
The following example shows how to save and load codec data into and from a binary file.
The codec which is currently used, must be declared globally.
If it is declared locally in the sub procedure, it would loose its settings
after exiting the sub procedure, because it would be removed from memory.
The complete example can be found in the samples directory in
Saving Codec Properties.
Save the data from a codec that was selected in a combo box.
[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 );
// Create the writer for data.
System.IO.BinaryWriter BinWriter = new System.IO.BinaryWriter( Filestream );
// Write data to 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 );
}
}
}
Load the previously saved data and assign it to a codec.
[C#] private void cmdLoadCodecData_Click( object sender, System.EventArgs e )
{
if( edtConfigFile.Text != "" )
{
try
{
// Create the reader for data.
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;
// Retrieve the name of the codec from the codec configuration file
CodecName = BinReader.ReadString();
// Search this codec in the codec combo box
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();
// Assign the configuration data to the codec.
Codec.CompressorData = BinReader.ReadBytes( codecDataLen );
}
else
{
// If the codec was not found, display an error message.
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 );
}
}
}
|