我有一个需求,要求一张图片大小为10 X 6.88厘米。 我知道不能简单地将厘米转换为像素,因为一个像素的大小取决于用户显示器的分辨率。 我想知道是否有一种方法可以调整图片大小以达到厘米尺寸。(我还需要保留图像扩展名,例如:不能将其转换为pdf或其他扩展名)
我有一个需求,要求一张图片大小为10 X 6.88厘米。 我知道不能简单地将厘米转换为像素,因为一个像素的大小取决于用户显示器的分辨率。 我想知道是否有一种方法可以调整图片大小以达到厘米尺寸。(我还需要保留图像扩展名,例如:不能将其转换为pdf或其他扩展名)
实际上,您需要区分屏幕上图像的尺寸和打印出来的图像的尺寸。
通常,您可以找到以下公式:
inches = pixels / dpi
pixel = inches * dpi
inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787 * dpi
这个程序将计算像素大小,使得图片在显示器上以X厘米的尺寸呈现。
但是在打印机上,情况并不那么简单,因为你不能像获取PPI(bmp.HorizontalResolution 和 bmp.VerticalResolution)那样轻松得到DPI。
public static int Cm2Pixel(double WidthInCm)
{
double HeightInCm = WidthInCm;
return Cm2Pixel(WidthInCm, HeightInCm).Width;
} // End Function Cm2Pixel
public static System.Drawing.Size Cm2Pixel(double WidthInCm, double HeightInCm)
{
float sngWidth = (float)WidthInCm; //cm
float sngHeight = (float)HeightInCm; //cm
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1))
{
sngWidth *= 0.393700787f * bmp.HorizontalResolution; // x-Axis pixel
sngHeight *= 0.393700787f * bmp.VerticalResolution; // y-Axis pixel
}
return new System.Drawing.Size((int)sngWidth, (int)sngHeight);
} // End Function Cm2Pixel
使用方法如下:
public System.Drawing.Image Generate(string Text, int CodeSize)
{
int minSize = Cm2Pixel(2.5); // 100;
if (CodeSize < minSize)
CodeSize = minSize;
if (string.IsNullOrEmpty(Text))
{
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(CodeSize, CodeSize);
using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
{
gfx.Clear(System.Drawing.Color.Black);
using(System.Drawing.Font fnt = new System.Drawing.Font("Verdana", 12, System.Drawing.FontStyle.Bold))
{
double y = CodeSize / 2.0 - fnt.Size;
gfx.DrawString("No Data", fnt, System.Drawing.Brushes.White, 5, (int)y, System.Drawing.StringFormat.GenericTypographic);
} // End Using fnt
} // End using gfx
return bmp;
} // End if (string.IsNullOrEmpty(Text))
...[Generate QR-Code]
return [Generated QR-Code]
}
double DPC = Image_DPI * 0.393700787;
double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;
if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff
弗雷德里克所说的意思是: 我会选择一个适当的DPI,并要求图像具有该分辨率或更高(但具有相同的纵横比),在导出/打印图像时,将图像调整为其他程序/打印机使用的DPI...
这可能很简单:大多数图像都会在其中存储每英寸的像素数。找出图像每个维度中的像素数,然后将其除以英寸数(从厘米转换)。然后使用原始位,只需修改每英寸像素数(或更常见的是每英寸点数)的字段。
因此,您的图片需要为3.93" x 2.71"。如果您的图像为393px x 271px,则应将dpi设置为100x100。如果您的图像为39px x 27px,则应将dpi设置为10x10。
尽管可能需要进行一些调整大小,如其他答案所解释的那样。 :)