如何使用c#查看程序中的图像质量?
我想查看照片是否适合打印或不使用我的应用程序。我怎么能这样做?我对照片质量了解不多?每张照片的分辨率是否相同?
我认为,您可以确定地检查打印质量的唯一因素(因为其他因素是主观的)是图像的分辨率与预期的打印尺寸。 如果您有其他有形要求,例如图像必须是彩色,而不是黑白,您也可以检查。 但是,试图识别图像是否过于模糊,低对比度等,可能是一种徒劳无功的追求,因为你永远不知道图像是否是这样的。
一个常见的经验法则是,打印时每英寸应至少有240个点,而300则更好。 当然,对于高质量的打印机,更高的分辨率可以产生更好的效果,如果你打印非常高的细节,如精细文本,你可能想要达到600dpi及以上。
因此,要使用240 dpi的最小图形打印8“x 10”图像,您需要至少1920 x 2400像素(总共4,608,000像素,或约4.5百万像素)的图像。
如果您决定在打印8“x 10”时至少需要300dpi,那么您需要一个至少为2400 x 3000像素的图像,大约为7百万像素。
加速到600dpi? 在这种情况下,你需要大约2800万像素的图像。
例:
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);
- Aes解密器给出空字符串
- 找不到类型或命名空间名称“System”
- LINQ ExecuteQuery – 错误
- RichtextBox中的颜色特定单词
- 使用ADO.NET Entity Framework批量插入和更新
- AngularJs和ASP.NET MVC 5-ng-model覆盖文本框值
- Visual Studio 2008 – 将构建时的文件移动到bin /
- 为什么在使用带有ASP.Net Identity的ApplicationCookie之前调用SignOut(DefaultAuthenticationTypes.ExternalCookie)?
- 为什么受“Enum”限制的generics类型无法在C#7.3中被认定为“结构”?