怎样判断两张图片是否相等???
要做图片的替换,如果是同一张图片则替换成另一张。请给个具体代码,谢谢? --------------------编程问答-------------------- 用二进流的形式读取图片文件,然后比较两个流是或一样. --------------------编程问答--------------------
--------------------编程问答-------------------- 用直方图统计吧,这样即使稍有些细节差异(包括等比例缩放......),也可以容错,不过也有一定的概率误判。 --------------------编程问答-------------------- 如果要判断是否完全相同,可以使用图片的Hash值来作判断。 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataRow dr;
dr = dt.NewRow();
byte[] temp1 = getImage("d://1.jpg");
byte[] temp2 = getImage("d://2.jpg");
bool isEqual = true;
//判断图片是否相等
if (temp1.Length == temp2.Length)
{
for (int i = 0; i < temp1.Length; i++)
{
if (temp1[i] != temp2[i])
{
isEqual = false;
}
}
}
else
{
isEqual = false;
}
if (isEqual)
{
Response.Write("<script>alert('两图片相等')</script>");
}
else
{
Response.Write("<script>alert('两图片不相等')</script>");
}
}
/// <summary>
/// 按图片路径把图片打成二进制流
/// </summary>
/// <param name="path">图片路径</param>
/// <returns></returns>
public byte[] getImage(string path)
{
FileStream fs = File.OpenRead(path);
MemoryStream ms = new MemoryStream();
int bdata;
while ((bdata = fs.ReadByte()) != -1)
{
ms.WriteByte(((byte)bdata));
}
byte[] data = (byte[])ms.ToArray();
fs.Close();
ms.Close();
fs = null;
ms = null;
return data;
}
}
up --------------------编程问答-------------------- 不知道lz需要的完全相等是什么概念上的。
如果是绝对的完全相等,那么只有两个完全相同的文件才可能做到完全相等,用上面的方法都可以做到。
如果只是用肉眼看起来很难(几乎不能)找到差异,那么对两幅图片求差,判断差的绝对值是否小于某一阈值即可做到比较。
--------------------编程问答-------------------- 同意4#的。 --------------------编程问答-------------------- 每张图片算个MD5码即可.
--------------------编程问答--------------------
MD5 md5 = MD5.Create();
FileStream inFile = new FileStream(imgFile, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[inFile.Length];
inFile.Read(buffer, 0, inFile.Length);
md5.ComputeHash(buffer);
不是要根据路径获取图片,而是要判断两个pictureBox里的图片是否是同一图片,知道的给个代码,谢谢 --------------------编程问答-------------------- 以文件路径来判断你要处理的图片是否存在。 --------------------编程问答--------------------
举一反三…
提供2种方式你自己选择,都行。
--------------------编程问答-------------------- --------------------编程问答-------------------- 这个网站的控件可能能帮助你。
//图片序列化为流后对比
public static bool IsSameImage(Image a, Image b)
{
MemoryStream m1 = new MemoryStream();
MemoryStream m2 = new MemoryStream();
a.Save(m1, a.RawFormat);
b.Save(m2, b.RawFormat);
if (m1.Length != m2.Length) return false;//长度都不等了
for (int i = 0; i < m1.Length; i++)
{
if (m1.ReadByte() != m2.ReadByte()) return false;//找到不同的了
}
return true;//相同
}
//像素对比
public static bool IsSameImage1(Image a, Image b)
{
if (a.Width != b.Width || a.Height != b.Height) return false;
Bitmap p1 = a as Bitmap;
Bitmap p2 = b as Bitmap;
for (int x = 0; x < a.Width; x++)
{
for (int y = 0; y < a.Height; y++)
{
if (p1.GetPixel(x, y) != p2.GetPixel(x, y)) return false;
}
}
return true;
}
网站
my blog
http://ufo-crackerx.blog.163.com/ --------------------编程问答-------------------- 关注学习 --------------------编程问答-------------------- 读成二进制流比较就可以了.. --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 图片是否相等的命题楼主给的不清楚。
如果是大家来找茬这样的东西,需要金字塔法。
如果只是单纯判断是不是绝对相同,那就把picturebox加载的image对象转换成bitmap然后通过bitmapdata一个一个比较像素。 --------------------编程问答-------------------- 比较hash值 --------------------编程问答-------------------- 我采用了你的第一种方法,出现了一个奇怪的问题,ReadByte()读取出来的值全部都是“-1”,如果在读取前加这句“Image.FromStream(m1);”,就能读到正确的值,这是为什么?怎么感觉跟激活了一下似的。
--------------------编程问答--------------------
确实如此,楼主首先应该明确“完全相等”的定义。 --------------------编程问答-------------------- 这个贴子2010年的了
补充:.NET技术 , C#