使用以下函数创建 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;
}
如您所见,我只使用这行代码中的DPIbmp1.SetResolution(72,72);
我想知道输出是否看起来相同,72 DPI 版本将如何适合网络以及在这种情况下 DPI 的真正效果是什么 提示:位图生成了贝塞尔曲线
首先,72 DPI 是显示设备的默认 DPI。 300 用于打印。
SetResolution
实际上并没有改变外观。"使用此方法在新创建的位图上设置所需的分辨率。更改图像的分辨率不会更改其物理大小。
它通常会影响应用于设备时">多大">的东西。 调用SetResolution
对其空间分辨率没有影响。
打印时,您可以设置图像的 DPI、物理尺寸和地图模式。 尝试通过 300 DPI 激光打印机在 A4 纸上打印逻辑大小为 210 mm x 294 mm 的 72 DPI 图像将出现像素化(因为它被拉伸以填充整张纸(。
但是,如果您维护 DPI,而是告诉 Windows 图像实际上为 50 mm x 50 mm,并在同一台 300 DPI 打印机上再次打印到 A4,它不会像素化,因为它更接近 1:1(尽管现在图像相当小(。
请务必注意,在上面的两个示例中,位图不仅物理上更改了其元尺寸,因此在纸上生成的大小也发生了变化。