我正在尝试使用c#更改jpg图像的分辨率。 我已经参考了在此链接How to change resolution (DPI) of an image?中编写的这段代码,它的工作正常,但是对于灰度图像,我还有另一个问题。 如果我尝试使用此代码保存灰度图像,则会将位深度8更改为24。
所以我尝试下面的代码,但是出现类似“位图区域已被锁定”的错误。我不知道如何在GetEncoderParameterList()中传递guid。
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);
}
}
例外: