我在Visual Studio 2019 IDE上使用。net框架编写一个用于比较两个图像的算法。
虽然比较工作ok,如果我比较整个png,但问题是,图片是主副本(针对新生成的图像进行比较)是在过去拍摄的时间戳较旧的日期和左上角的时间戳,由于最新的图片生成总是产生失败的结果,即图像不匹配,因为在图片上的时间戳的时间差。目前,我正在使用以下工作与相同的时间戳图像
System.Drawing
System.Drawing.Imaging
Bitmap original_image = (Bitmap)Bitmap.FromFile(imageFile);
Bitmap test_image = (Bitmap)Bitmap.FromFile(testimageFile);
if(object.Equals(original_image,test_image)
return true
BitmpaData bitmapDataMasterPicture = original_image.LockBits(new Rectangle(0,0,original_image.Width,original_image.Height),ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);
BitmpaData bitmapDataTestPicture = test_image.LockBits(new Rectangle(0,0,test_image.Width,test_image.Height),ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);
for(int i = 0; i<totalBytes-1 ;i++)
if(bitmapDataMasterPicture[i] != bitmapDataTestPicture[i])
{
return false;
}
original_image.UnlockBits(bitmapDataMasterPicture);
test_image.UnlockBits(bitmapDataTestPicture);
是否有一个函数/算法来比较两个png图像的一部分,而不是完全使用c# ?也就是跳过左上角的时间戳。
您可以裁剪图像或绘制覆盖时间戳的实矩形。
Graphics oGraphics= Graphics.FromImage(original_image);
Rectangle rect = new Rectangle(0, 0, 200, 200);
oGraphics.DrawRectangle(new Pen(Color.Black, 3), rect);
大家好,感谢大家的回复。我设法通过设置y轴上的偏移量来解决这个问题,如下所示:
BitmpaData bitmapDataMasterPicture = original_image.LockBits(new
Rectangle(0,10,original_image.Width,original_image.Height),ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);
BitmpaData bitmapDataTestPicture = test_image.LockBits(new Rectangle(0,10,test_image.Width,test_image.Height),ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);