C# 如何比较两幅图像并获得大小差异的百分比

C# 如何比较两幅图像并获得大小差异的百分比,c#,gdi+,C#,Gdi+,我如何在c#假设中比较两幅图像 imageA尺寸为1024x640 图像B尺寸320x480 我想知道怎样才能得到像imageb这样大小的百分比 图像B比图像A小nn% 我这么做了,但想知道我是否做对了??? 图像A总像素655360(1024x640) 图像B总像素153600(320x480) 所以 字符串ImageBSize=(153600/655360)*100+“比imageA小” 假设您使用的是System.Drawing.Image或System.Drawing.Bitmap,

我如何在c#假设中比较两幅图像

  • imageA尺寸为1024x640
  • 图像B尺寸320x480
我想知道怎样才能得到像imageb这样大小的百分比 图像B比图像A小nn%

我这么做了,但想知道我是否做对了??? 图像A总像素655360(1024x640) 图像B总像素153600(320x480)

所以
字符串ImageBSize=(153600/655360)*100+“比imageA小”

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

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"));

您的算法是正确的,但在执行除法之前,请小心将值强制转换(或指定)为双倍,否则将得到整数除法,如果imageB小于imageA,则结果将始终为0

你可以这样做:

string ImageBSize = (((double) 153600 / 655360) * 100) + " percent smaller than imageA";
B is 12.5 percent smaller than A
但是,如果你把你的陈述分解成更小、更清晰的陈述,它将更具可读性和可维护性:

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");
这将导致如下输出:

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

我已经编辑了你的标题。请看“”,其中共识是“不,他们不应该”。计算两者的面积,然后将一个除以另一个。似乎是一个简单的数学问题,而不是一个编程问题;像这样好吗?你想解决的真正问题是什么?比较具有不同纵横比的图像区域在数值上很容易,但这意味着什么?实际上,在不同大小的图像上绘制水印用户选择图像,然后选择水印图像,然后调整水印图像的大小,然后他选择其他图像并批处理所有问题是我想在第一幅图像上找到水印大小的%,以便我可以将该水印大小的%传递给其他不同大小的图像大小使其完美地绘制水印@Bokkie answer有助于我小心,我认为您将通过整数除法获得位。如果您将
imageASize
imageBSize
设置为双精度而不是整数,我认为这样做会很好。@ScottChamberlain您完全正确。使用int时,比率可能始终为0。我改变了这个例子。