当前位置:网站首页>C # compare the differences between the two images
C # compare the differences between the two images
2022-07-05 09:07:00 【Dakeshan people】
// test :
void Main()
{
var a = (Bitmap)Image.FromFile("image1.png");
var b = (Bitmap)Image.FromFile("image2.png");
var diff = PixelDiff(a, b);
}
// Method
unsafe Bitmap PixelDiff(Bitmap a, Bitmap b)
{
Bitmap output = new Bitmap(a.Width, a.Height, PixelFormat.Format32bppArgb);
Rectangle rect = new Rectangle(Point.Empty, a.Size);
using (var aData = a.LockBitsDisposable(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb))
using (var bData = b.LockBitsDisposable(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb))
using (var outputData = output.LockBitsDisposable(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb))
{
byte* aPtr = (byte*)aData.Scan0;
byte* bPtr = (byte*)bData.Scan0;
byte* outputPtr = (byte*)outputData.Scan0;
int len = aData.Stride * aData.Height;
for (int i = 0; i < len; i++)
{
// For alpha use the average of both images (otherwise pixels with the same alpha won't be visible)
if ((i + 1) % 4 == 0)
*outputPtr = (byte)((*aPtr + *bPtr) / 2);
else
*outputPtr = (byte)~(*aPtr ^ *bPtr);
outputPtr++;
aPtr++;
bPtr++;
}
}
return output;
}
// Expand
static class Extensions
{
public static DisposableImageData LockBitsDisposable(this Bitmap bitmap, Rectangle rect, ImageLockMode flags, PixelFormat format)
{
return new DisposableImageData(bitmap, rect, flags, format);
}
public class DisposableImageData : IDisposable
{
private readonly Bitmap _bitmap;
private readonly BitmapData _data;
internal DisposableImageData(Bitmap bitmap, Rectangle rect, ImageLockMode flags, PixelFormat format)
{
bitmap.CheckArgumentNull("bitmap");
_bitmap = bitmap;
_data = bitmap.LockBits(rect, flags, format);
}
public void Dispose()
{
_bitmap.UnlockBits(_data);
}
public IntPtr Scan0
{
get { return _data.Scan0; }
}
public int Stride
{
get { return _data.Stride;}
}
public int Width
{
get { return _data.Width;}
}
public int Height
{
get { return _data.Height;}
}
public PixelFormat PixelFormat
{
get { return _data.PixelFormat;}
}
public int Reserved
{
get { return _data.Reserved;}
}
}
}
边栏推荐
- Summary and Reflection on issues related to seq2seq, attention and transformer in hands-on deep learning
- What is a firewall? Explanation of basic knowledge of firewall
- Programming implementation of ROS learning 2 publisher node
- Mengxin summary of LIS (longest ascending subsequence) topics
- ECMAScript6介绍及环境搭建
- Use and programming method of ros-8 parameters
- The combination of deep learning model and wet experiment is expected to be used for metabolic flux analysis
- Multiple linear regression (gradient descent method)
- Multiple solutions to one problem, asp Net core application startup initialization n schemes [Part 1]
- Ros-11 common visualization tools
猜你喜欢
[beauty of algebra] singular value decomposition (SVD) and its application to linear least squares solution ax=b
Solution to the problems of the 17th Zhejiang University City College Program Design Competition (synchronized competition)
[technical school] spatial accuracy of binocular stereo vision system: accurate quantitative analysis
容易混淆的基本概念 成员变量 局部变量 全局变量
牛顿迭代法(解非线性方程)
Huber Loss
Programming implementation of ROS learning 6 -service node
Ros-10 roslaunch summary
fs. Path module
Multiple solutions to one problem, asp Net core application startup initialization n schemes [Part 1]
随机推荐
我从技术到产品经理的几点体会
fs. Path module
MPSoC QSPI Flash 升级办法
Introduction Guide to stereo vision (3): Zhang calibration method of camera calibration [ultra detailed and worthy of collection]
Solution to the problems of the 17th Zhejiang University City College Program Design Competition (synchronized competition)
迁移学习和域自适应
Array,Date,String 对象方法
scipy. misc. imread()
Confusion matrix
scipy.misc.imread()
Applet (use of NPM package)
Beautiful soup parsing and extracting data
. Net service governance flow limiting middleware -fireflysoft RateLimit
Oracle advanced (III) detailed explanation of data dictionary
[daiy4] copy of JZ35 complex linked list
2310. 个位数字为 K 的整数之和
kubeadm系列-01-preflight究竟有多少check
File server migration scheme of a company
资源变现小程序添加折扣充值和折扣影票插件
notepad++