C# 在cm C中调整图像大小#

C# 在cm C中调整图像大小#,c#,image,resize,pixels,C#,Image,Resize,Pixels,我有一个要求,要求一个10 X 6,88厘米的图像。 我知道我不能简单地将厘米转换成像素,因为一个像素的大小取决于用户的显示分辨率。 我想知道是否有一种方法来调整图像的大小,以厘米为单位。(我还需要保留图像扩展名。例如:无法将其转换为pdf或其他扩展名)这实际上取决于用户打印图像的分辨率(除了打印时,以厘米为单位的大小没有什么意义)。如果用户希望以200 dpi的速度进行打印,则图像需要(10/2.54*200)乘以(6.88/2.54*200)像素(需要2.54的除法在厘米和英寸之间转换)。所

我有一个要求,要求一个10 X 6,88厘米的图像。 我知道我不能简单地将厘米转换成像素,因为一个像素的大小取决于用户的显示分辨率。
我想知道是否有一种方法来调整图像的大小,以厘米为单位。(我还需要保留图像扩展名。例如:无法将其转换为pdf或其他扩展名)

这实际上取决于用户打印图像的分辨率(除了打印时,以厘米为单位的大小没有什么意义)。如果用户希望以200 dpi的速度进行打印,则图像需要(10/2.54*200)乘以(6.88/2.54*200)像素(需要2.54的除法在厘米和英寸之间转换)。所需的分辨率在很大程度上取决于图像的类型以及用户的质量要求

所以,仅仅说“我想调整到X乘以Y厘米”是没有意义的


对于如何在计算出所需图像大小后进行实际调整的代码示例,应满足您的需要。

弗雷德里克是这么说的:
我会选择一个好的DPI,并要求图像的分辨率或更高(但纵横比相同),在导出/打印图像时,将图像调整为其他程序/打印机使用的DPI…

可能就这么简单:大多数图像在其中存储每英寸的像素数。计算出图像每个维度的像素数,然后除以英寸数(从厘米转换)。然后使用原始位,只需修改每英寸像素数(或者更常见的是每英寸点数)的字段

因此,您的图片需要为3.93英寸x2.71英寸。如果您的图像为393px 271px,则应将dpi设置为100x100。如果您的图像是39px 27px,您可以将dpi设置为10x10


不过,正如其他答案所解释的,您可能需要进行一些调整

像JPG和TIFF这样的图像文件格式有一个类似于水平和垂直DPI的信息

因此,如果您得到一个包含此元数据的图像,您可以验证可打印的大小

double DPC = Image_DPI * 0.393700787;

double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;

if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff
double DPC=Image_DPI*0.393700787;
double widthInCm=图像宽度*DPC;
双倍高度incm=图像高度*DPC;

如果(widthInCm实际上,您必须区分屏幕上的图像大小和打印输出上的图像大小

通常,您会发现以下公式:

inches = pixels / dpi
因此,情况如下:

pixel = inches * dpi
实际上,这是打印用的。
对于显示器,将dpi替换为ppi,您就可以看到了

对于那些(像我一样)不熟悉英寸的人:

inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787  * dpi
此例程将计算像素大小,使图像在监视器上显示X-cm。
但是在打印机上,你没有那么容易,因为你不能像PPI(bmp.HorizontalResolution&bmp.VerticalResolution)那样容易地获得DPI

用法如下所示:

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]
}
public System.Drawing.Image生成(字符串文本,int-CodeSize)
{
int minSize=Cm2Pixel(2.5);//100;
如果(代码大小<分钟大小)
CodeSize=minSize;
if(string.IsNullOrEmpty(Text))
{
System.Drawing.Bitmap bmp=新的System.Drawing.Bitmap(CodeSize,CodeSize);
使用(System.Drawing.Graphics gfx=System.Drawing.Graphics.FromImage(bmp))
{
gfx。清晰(系统。图纸。颜色。黑色);
使用(System.Drawing.Font fnt=new System.Drawing.Font(“Verdana”,12,System.Drawing.FontStyle.Bold))
{
双y=代码大小/2.0-fnt.大小;
gfx.DrawString(“无数据”,fnt,System.Drawing.Brush.White,5,(int)y,System.Drawing.StringFormat.GenericTyphographic);
}//结束使用fnt
}//结束使用gfx
返回bmp;
}//如果(string.IsNullOrEmpty(Text))结束
…[生成二维码]
返回[生成的二维码]
}

你能用图像分辨率吗?为了澄清这一点,图像大小取决于图像分辨率。当它显示在屏幕上时,应该有一个明确的设备分辨率比例(但通常没有)。有关更多信息,请参阅此处:不同意“除打印时外,以厘米为单位的大小没有任何意义”,当您必须查看与打印文档大小相同的文档时(例如WYSIWYG designer),以厘米为单位的大小是非常有意义的。否则,您最终会看到经典的WYSIWYG(所见即所得),例如在Microsoft Report designer(SSRS)中。
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]
}