Как я могу проверить качество изображения в программе с помощью C #? - PullRequest
4 голосов
/ 28 марта 2010

Я хочу проверить, подходит ли фотография для печати или нет, используя мое приложение. Как я могу это сделать? Я мало знаю о качестве фотографии? Является ли разрешение каждой фотографии одинаковым или нет?

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

Я думаю, что единственный фактор качества печати, который вы можете с уверенностью проверить (поскольку другие факторы носят субъективный характер), - это разрешение изображения по сравнению с предполагаемым размером печати. Если у вас есть другие осязаемые требования, например, изображение должно быть цветным, а не черно-белым, вы можете это проверить. Но попытка определить, является ли изображение слишком размытым, низким контрастом и т. Д., Вероятно, будет бесполезным занятием, так как вы никогда не знаете, было ли изображение предназначено именно так или нет.

Общее правило: при печати у вас должно быть не менее 240 точек на дюйм, а 300 - еще лучше. Конечно, с качественными принтерами, более высокое разрешение, чем это, может дать лучшие результаты, и если вы печатаете очень высокую детализацию, например, мелкий текст, вы можете перейти на 600 dpi и выше.

Таким образом, для печати изображения 8 "x 10" с минимальным разрешением 240 точек на дюйм вам потребуется изображение размером не менее 1920 x 2400 пикселей (всего 4 608 000 пикселей или около 4,5 мегапикселей).

Если вы решите, что при печати 8 "x 10" вы хотите разрешение не менее 300 точек на дюйм, тогда вам нужно изображение размером не менее 2400 x 3000 пикселей, что составляет около 7 мегапикселей.

Повышение до 600 точек на дюйм? В этом случае вам потребуется изображение размером около 28 мегапикселей.

Пример:

using System;
using System.Drawing;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int minimumPrintDpi = 240;
            int targetPrintWidthInches = 8;
            int targetPrintHeightInches = 10;
            int minimumImageWidth = targetPrintWidthInches * minimumPrintDpi;
            int minimumImageHeight = targetPrintHeightInches * minimumPrintDpi;

            var img = Image.FromFile(@"C:\temp\CaptainKangaroo.jpg");

            Console.WriteLine(string.Format("Minimum DPI for printing: {0}", minimumPrintDpi));
            Console.WriteLine(string.Format("Target print size: width:{0}\" x height:{1}\"", targetPrintWidthInches, targetPrintHeightInches));
            Console.WriteLine(string.Format("Minimum image horizontal resolution: {0}", minimumImageWidth));
            Console.WriteLine(string.Format("Minimum image vertical resolution: {0}", minimumImageHeight));
            Console.WriteLine(string.Format("Actual Image horizontal resolution: {0}", img.Width));
            Console.WriteLine(string.Format("Actual Image vertical resolution: {0}", img.Height));
            Console.WriteLine(string.Format("Actual image size in megapixels: {0}", ((float)img.Height * img.Width) / 1000000));
            Console.WriteLine(string.Format("Image resolution sufficient? {0}", img.Width >= minimumImageWidth && img.Height >= minimumImageHeight));
            Console.WriteLine(string.Format("Maximum recommended print size for this image: width:{0}\" x height:{1}\"", (float)img.Width / minimumPrintDpi, (float)img.Height / minimumPrintDpi));

            Console.ReadKey();
        }
    }
}
0 голосов
/ 28 марта 2010

Существует множество факторов, которые различают изображение «хорошего качества» и «плохого качества»

В википедии есть краткий список этих факторов

Большинство из них довольно сложно проверить программно и включают сложные алгоритмы визуализации. Однако проверить разрешение очень просто, если это единственный критерий между хорошим и плохим изображением.

Этот простой код говорит вам, как это сделать

Я думаю, что самый простой код для получения разрешения это

  Bitmap bmp = new Bitmap("winter.jpg");

  Console.WriteLine("Image resolution: " + bmp.HorizontalResolution + " DPI");
  Console.WriteLine("Image resolution: " + bmp.VerticalResolution + " DPI");
  Console.WriteLine("Image Width: " + bmp.Width);
  Console.WriteLine("Image Height: " + bmp.Height);
...