Я пытаюсь изменить разрешение моего изображения JPG с помощью C #.
Я ссылался на этот код, который написан по этой ссылке Как изменить разрешение (DPI) изображения? он работает нормально, но у меня возникает другая проблема для изображений в градациях серого.
если я попытаюсь сохранить изображение в градациях серого с помощью этого кода, тогда он изменит битовую глубину с 8 на 24.
Итак, я попробовал приведенный ниже код, но я получаю сообщение об ошибке типа «Область растрового изображения уже заблокирована». Я не знаю, как передать guid в GetEncoderParameterList ().
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
//Code
using (Image bitmap = Image.FromFile(pagePath))
{
using (Bitmap newBitmap = new Bitmap(bitmap))
{
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters para = newBitmap.GetEncoderParameterList(jpgEncoder.Clsid);
imageResolution = (int)newBitmap.HorizontalResolution;
newBitmap.SetResolution(250, 250);
newBitmap.Save("file300.jpg", jpgEncoder, para);
}
}
Исключение:
![enter image description here](https://i.stack.imgur.com/grg1K.png)