栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较两个相等大小的位图以确定它们是否相同的最快方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较两个相等大小的位图以确定它们是否相同的最快方法是什么?

编辑8-31-12:根据以下Joey的评论,请注意您比较的位图的格式。它们可能在跨步中包含填充,这些填充使位图不相等,尽管在像素方向上是等效的。有关更多详细信息,请参见此问题。


阅读有关比较字节数组的问题的答案后,产生了MUCH FASTER方法:使用P /
Invoke和msvcrt中的memcmp API调用。这是代码:

[Dllimport("msvcrt.dll")]private static extern int memcmp(IntPtr b1, IntPtr b2, long count);public static bool CompareMemCmp(Bitmap b1, Bitmap b2){    if ((b1 == null) != (b2 == null)) return false;    if (b1.Size != b2.Size) return false;    var bd1 = b1.LockBits(new Rectangle(new Point(0, 0), b1.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);    var bd2 = b2.LockBits(new Rectangle(new Point(0, 0), b2.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);    try    {        IntPtr bd1scan0 = bd1.Scan0;        IntPtr bd2scan0 = bd2.Scan0;        int stride = bd1.Stride;        int len = stride * b1.Height;        return memcmp(bd1scan0, bd2scan0, len) == 0;    }    finally    {        b1.UnlockBits(bd1);        b2.UnlockBits(bd2);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号