如何比较2张图片并获得百分比大小差异

时间:2014-05-27 21:16:02

标签: c# gdi+

如何比较c#中的2个图像假设

  • imageA大小1024x640
  • imageB尺寸320x480

我想知道如何获得大小像素的百分比 图像B比imageA

小nn%

我做了这个,但想知道我做得对吗??? 图片总像素655360(1024x640) 图像B总像素为153600(320x480)

所以 string ImageBSize =(153600/655360)* 100 +"小于imageA&#34 ;;

2 个答案:

答案 0 :(得分:1)

假设您正在使用System.Drawing.Image或System.Drawing.Bitmap,您可以只请求每个图像的“大小”属性。 '尺寸'分为'高度'和'宽度'。计算每个图像的“高度*宽度”,然后您可以计算两个图像的“尺寸”之间的比率。

Image imageA = new System.Drawing.Image("ImageA.png");
Image imageB = new System.Drawing.Image("ImageB.png");

double imageASize = imageA.Size.Height * imageA.Size.Width;
double imageBSize = imageB.Size.Height * imageB.Size.Width;

string ratio = string.Format("Image B is {0}% of the size of image A", 
  ((imageBSize / imageASize)*100).ToString("#0"));

答案 1 :(得分:0)

你的算法是正确的,但要小心你在执行除法之前将值转换(或赋值)为双精度数,否则你会得到整数除法,如果imageB小于imageA,则总是得到0。

你可以在一行中这样做:

string ImageBSize = (((double) 153600 / 655360) * 100) + " percent smaller than imageA";

但是如果你把你的陈述分解成更小,更清晰的陈述,它将更具可读性和可维护性:

double imageASize = imageA.Size.Height * imageA.Size.Width;
double imageBSize = imageB.Size.Height * imageB.Size.Width;
double percentBIsSmaller = (imageBSize / imageASize) * 100;
string result = String.Format("B is {0:F2} percent smaller than A");

这会产生如下输出:

B is 12.5 percent smaller than A