使用以下功能创建jpeg图像
private static void Save(Bitmap bmp1, string path, ImageFormat format)
{
bmp1.SetResolution(72,72);
ImageCodecInfo jpgEncoder = GetEncoder(format);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, 100L);
bmp1.Save(path, jpgEncoder, myEncoderParameters);
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
如您所见,我只使用代码bmp1.SetResolution(72,72);
我想知道输出是否相同,72 DPI版本如何适合网络以及在这种情况下DPI的真正作用是什么 提示:位图是根据贝塞尔曲线生成的
答案 0 :(得分:2)
首先,72 DPI已成为显示设备的默认DPI。 300以供打印。
SetResolution
实际上并没有改变外观。 “ Use this method to set the desired resolution on a newly created bitmap. Changing the resolution of the image does not change its physical size.” 。
通常会影响“有多大” 应用于设备时的情况。调用SetResolution
对其 spatial resolution 无效。
打印时,为图像设置DPI;物理尺寸和地图模式。尝试通过300 DPI激光打印机在A4纸上打印逻辑尺寸为210 mm x 294 mm的72 DPI图像会像素化(因为它被拉伸以填充整张纸)。
但是,如果您维护DPI,而是告诉Windows图像的确是50 mm x 50 mm,并在同一300 DPI打印机上再次打印到A4,它将不会出现像素化,因为它更接近1 :1(尽管现在图像很小)。
重要的是要注意,在上面的两个示例中,位图并不仅在物理上改变了其元尺寸,因此也改变了纸上的尺寸。