c#

位置:IT落伍者 >> c# >> 浏览文章

浅谈.Net如何实现找出两幅图片的不同之处


发布日期:2021年06月01日
 
浅谈.Net如何实现找出两幅图片的不同之处

初学Net的时候我就写了个QQ大家来找茬的外挂其实主要的原理不过就是判断两幅图片不同之处那时候的实现方法就是两幅图片不停的切换然后眼睛就会看到不同的地方那时候很菜不懂的timer让他实现自动切换用了很土的方法设置了个全局热键 F热键截图F切换图片/图片就这样按F切换来切换去操作困难也很没有效率现在回忆起来也觉得很幼稚呵呵说了这么多废话还是开始进入正题吧!

现在说的第一种方法实现比较两幅图片不同之处其实也就是上面开场白所说的方法两幅图片不停的切换出现当然是用Timer控件而不是手动(要不就太土了)!容器就用PictureBox来显示图片吧这种方法代码比较简单代码我就不贴出来主要是说说思路!

第二种方法其实就是遍历张图片的像素找出不同的地方然后标记上去 这种方法与第一种方法相比好处很明显就是比较直观第一种方法如果眼力不好或者有色盲的特殊人士估计就很费力了下面我贴出一些关键代码

代码

private void ImageCompare()

{

Bitmap firstImage = new Bitmap(jpg);

Bitmap secondImage = new Bitmap(jpg);

bool A = true B = true;

string firstPixel;

string secondPixel;

Graphics g = GraphicsFromImage(firstImage);

//消除锯齿

gSmoothingMode = SystemDrawingDrawingDSmoothingModeAntiAlias;

//填充背景颜色

// Brush br = new SolidBrush(ColorRed);

if (firstImageWidth == secondImageWidth

&& firstImageHeight == secondImageHeight)

{

for (int i = ; i < firstImageWidth; i++)

{

for (int j = ; j < firstImageHeight; j++)

{

if (!firstImageGetPixel(i j)Equals(secondImageGetPixel(i j)))

{ //设置不同的地方为红色

firstImageSetPixel(i j ColorRed);

}

}

}

}

}

以上种方法有需要注意的地方:

副图片的大小要一样

副图片截图的位置不要歪了一定要精确第一种方法歪了一些勉强可以识别但是对第二种方法那简直就是杯具了

上面个方法是用来找出图片的不同之处如果用于比较两幅图片是否相同效率都比较低不建议使用

目前我暂时只想到用这种方法来找出二副图片的不同之处第一种方法对制作大家来找茬的外挂效率比较高(前提是眼力不要太差)第二种方法运算速度有点慢主要因为要遍历图片的像素这个过程需要多的时间 估计改进下算法就会好很多当然光会对比图片对于制作大家来找茬的外挂是远远不够的有机会的话我就说说整个大家来找茬外挂的制作方法!

上一篇:C#中if语句基础学习

下一篇:教你在c#中实现3层架构