【发布时间】:2021-11-05 03:34:32
【问题描述】:
我在 Visual Studio 2019 IDE 上使用 .NET Framework 编写用于比较两个图像的算法。
虽然比较工作正常,但如果我比较整个 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);
是否有使用 C# 比较两个 png 图像的一部分而不是完整图像的函数/算法?那就是跳过左上角的时间戳。
【问题讨论】:
-
如果我比较整个 png,比较就可以了 嗯,我们看不到您的代码,所以我们无法告诉您如何调整它。它希望您实际上是在对图像进行映射,而不仅仅是参考??
-
This:
object.Equals(original_image,test_image)正在比较两个引用,它将始终返回false,因为引用显然不一样。要确定与内容相关的相等性,您需要以某种方式解析位图数据。使用Bitmap.LockBits()解析数据或简单地加载图像字节并使用SequenceEquals()进行比较(必须相同)。 -
您确实给了一个
Rectangle以将该区域锁定到LockBits操作。您需要做的就是调整它的坐标和大小。