Я пытаюсь использовать этот пример кода от Microsoft, чтобы определить, какие параметры кодировщика доступны для кодера JPEG.(Реальная проблема, которую я пытаюсь решить, - посмотреть, могу ли я установить параметры подвыборки Chroma явно)
http://msdn.microsoft.com/en-us/library/bb882589.aspx
private void GetSupportedParameters(PaintEventArgs e)
{
Bitmap bitmap1 = new Bitmap(1, 1);
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters paramList = bitmap1.GetEncoderParameterList(jpgEncoder.Clsid);
EncoderParameter[] encParams = paramList.Param;
StringBuilder paramInfo = new StringBuilder();
for (int i = 0; i < encParams.Length; i++)
{
paramInfo.Append("Param " + i + " holds " + encParams[i].NumberOfValues +
" items of type " +
encParams[i].ValueType + "\r\n" + "Guid category: " + encParams[i].Encoder.Guid + "\r\n");
}
e.Graphics.DrawString(paramInfo.ToString(), this.Font, Brushes.Red, 10.0F, 10.0F);
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
Проблема в том, что GetEncoderParameterList всегда выдаетИсключение: область растрового изображения уже заблокирована.
Я пытался поместить код в самое начало моей программы, а не в обработчик события на рисовании.То же самое.Я пытался изменить битовую глубину на растровом изображении и создавать растровые изображения другими способами, без разницы.
Любая идея, почему .NET считает, что только что созданное растровое изображение имеет заблокированную область?
Обновить!Немного больше информации: если я использую кодировщик TIFF, он не выходит из строя:
Bitmap bitmap1 = new Bitmap(1, 1);
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.TIFF); // TIFF instead of JPEG
EncoderParameters paramList = bitmap1.GetEncoderParameterList(jpgEncoder.Clsid);
EncoderParameter[] encParams = paramList.Param;
Так что я думаю, что это может быть просто ошибкой / ограничением GetEncoderparameterList для jpeg ....