Как проверить качество изображения в программе с помощью 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);