Как проверить качество изображения в программе с помощью C#?

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

2 ответа

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

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

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

Если вы решите, что хотите печатать разрешение не менее 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();
        }
    }
}

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

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

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

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

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

  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);
Другие вопросы по тегам