【问题标题】:How can I get the resolution of an image? (JPEG, GIF, PNG, JPG)如何获得图像的分辨率? (JPEG、GIF、PNG、JPG)
【发布时间】:2010-02-05 12:40:10
【问题描述】:

我找到了这个方法:

Graphics g = e.Graphics;
Bitmap bmp = new Bitmap("winter.jpg");
g.DrawImage(bmp, 0, 0);
Console.WriteLine("Screen resolution: " + g.DpiX + "DPI");
Console.WriteLine("Image resolution: " + bmp.HorizontalResolution + "DPI");
Console.WriteLine("Image Width: " + bmp.Width);
Console.WriteLine("Image Height: " + bmp.Height);

SizeF s = new SizeF(bmp.Width * (g.DpiX / bmp.HorizontalResolution),
                    bmp.Height * (g.DpiY / bmp.VerticalResolution));

Console.WriteLine("Display size of image: " + s);

但我真的不明白如何获取我要查找的内容。我对 DPI 不感兴趣,我只需要 1024x768、1200x1024 等数字。另外,每次我想找到图像的分辨率时,我是否必须创建一个新的图像对象?

我正在制作一个列出给定文件夹中当前图像的应用程序,因此我们将不胜感激。 :)

【问题讨论】:

    标签: c# .net image c#-3.0


    【解决方案1】:

    “1024x768”仅在计算机显示设置的上下文中被称为“分辨率”,即使这样,它也是一个不幸的误称。在成像中,“1024x768”只是图像的 widthheight,因此正如其他人所提到的,您已经展示了检索这些数字的代码。稍微调整一下:

    var img = Image.FromFile(@"C:\image.jpg");
    Console.WriteLine(img.Width + "x" + img.Height); // prints "1024x768" (etc)
    

    获取所需数字的唯一内置方法是创建一个新实例(事实上,解码整个图像) - 如果您只需要检索这些数字,这将非常低效数百张图像。避免这种情况很难;这是一个起点:How do I reliably get an image dimensions in .NET without loading the image?


    当您谈到“分辨率”时,您通常指的是dots, or pixels, per inch 的数量。 Bitmap 类将其存储在 HorizontalResolution / VerticalResolution 属性中,而 Graphics 类则存储在 DpiX / DpiY 中。

    这个计算:

    bmp.Width * (g.DpiX / bmp.HorizontalResolution)
    

    为了清楚起见,可以重新排列如下:

    (bmp.Width / bmp.HorizontalResolution) * g.DpiX
    

    括号中的部分以英寸为单位计算图像的宽度。乘以g.DpiX,然后得到Graphics 对象中与图像bmp 具有相同宽度(以英寸为单位)的像素数。

    【讨论】:

    • 您能否提供一个最小的工作示例/JS fiddle 以使用 JS 获取上传的 JPEG 图像的 DPI?
    • 有趣的愚蠢事实...如果您调用旋转功能 MS 决定它是 300DPI...无论原始图像设置为什么。你必须在旋转之前捕捉 if,旋转,重置它(每旋转 90 度进行适当的翻转调整),然后保存它。因为微软....
    【解决方案2】:

    获取尺寸:

    string path = @"C:\winter.jpg";
    Image img = Image.FromFile(path);
    Console.WriteLine("Image Width: " + img.Width); //equals img.Size.Width
    Console.WriteLine("Image Height: " + img.Height); //equals img.Size.Height
    

    这是full list of System.Drawing.Image properties,如果要显示其他人的案例。

    我不确定是否有更快的方法来处理整个目录,Windows Vista/7 可能有一个更新的 API 包含此信息,但还没有遇到过。

    【讨论】:

      【解决方案3】:

      您肯定已经回答了自己的问题,就这么简单:

      Bitmap bmp = new Bitmap(@"winter.bmp");     
      Console.WriteLine("Image Width: " + bmp.Width);
      Console.WriteLine("Image Height: " + bmp.Height);
      

      DPI 信息仅在您显示或打印图像时才有用。在示例代码中,它将图像转换为可用于将图像绘制到屏幕上的Graphics 对象。

      要回答您问题的第二部分,您可以解析 JPEG 文件头以查找宽度/高度信息,而无需实际加载图像。但要做到这一点,您需要知道 JPEG 文件的标题信息和文件格式。

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 1970-01-01
        • 2010-09-29
        • 2021-12-21
        • 2017-12-21
        • 2011-03-21
        • 2013-01-06
        • 1970-01-01
        相关资源
        最近更新 更多