CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

如何比较屏幕(dc)区域 跟文件(bmp)中相同大小区域 第一个正确答案100分全给

楼主kingbin(co)2005-08-03 15:56:33 在 VC/MFC / 图形处理/算法 提问

 
  最好用api不用MFC 问题点数:100、回复次数:7Top

1 楼casinosun(去日苦多)回复于 2005-08-03 15:58:44 得分 0

异或Top

2 楼dandycheung(珠穆朗玛)回复于 2005-08-03 16:02:44 得分 0

说得再详细些。Top

3 楼kingbin(co)回复于 2005-08-03 16:03:40 得分 0

兄弟我不熟HBITMAP怎么用  
   
  能给出个简单dc->BITBMP   bmpfile->BITBMP过程用那些API  
  line   to   line的比较还是pixel   to   pixel  
  能否降低   bit/pixel   比较提高效率Top

4 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-03 17:12:02 得分 0

dc->BITBMP    
  GetCurrentObject(hdc,   OBJ_BITMAP);  
  bmpfile->BITBMP  
  ::LoadImage(NULL,   lpszPath,IMAGE_BITMAP,  
                                                            0,   0,   LR_LOADFROMFILE   |  
                                                            LR_CREATEDIBSECTION);  
  简单的做法  
  CreateCompatibleDC创建一个内存DC  
  SelectObject(hMemDC,   hBitmap);  
  对两个DC分别调用GetPixel进行比较Top

5 楼kingbin(co)回复于 2005-08-03 18:05:25 得分 0

to     goodboyws(深夜不眠者)    
   
  你就是我的偶像,不过这个方法要不停的调用GetPixel   函数调用会不会降低效率。有没有方法把dc,bmp都转化为内存里面的数组或比特流(是不是bmbits,可是怎么让这两个在数组里面颜色表相同),然后比较两个数组。Top

6 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-04 10:31:17 得分 100

这样是否可以??  
  HBITMAP   hBmp   =   (HBITMAP)GetCurrentObject(hdc,   OBJ_BITMAP);  
  BITMAP   bm;  
  GetObject(hBmp,   sizeof(bm),   &bm);  
  HBITMAP   hBmpFile   =   ::LoadImage(NULL,   lpszPath,IMAGE_BITMAP,  
                                                            0,   0,   LR_LOADFROMFILE   |  
                                                            LR_CREATEDIBSECTION);  
   
  BITMAP   bmFile;  
  GetObject(hBmpFile   ,   sizeof(bmFile),   &bmFile);  
        BITMAPINFOHEADER   bmi;        
        bmi.biSize                     =   sizeof(BITMAPINFOHEADER);  
        bmi.biWidth                   =   bmFile.bmWidth;  
        bmi.biHeight                 =   bmFile.bmHeight;  
        bmi.biPlanes                 =   1;  
        bmi.biBitCount             =   bm.bmPlanes   *   bm.bmBitsPixel;  
   
        if   (bmi.biBitCount   <=   1)  
            bmi.biBitCount   =   1;  
        else   if   (bmi.biBitCount   <=   4)  
            bmi.biBitCount   =   4;  
        else   if   (bmi.biBitCount   <=   8)  
            bmi.biBitCount   =   8;  
        else  
            bmi.biBitCount   =   24;  
   
        bmi.biCompression       =   BI_RGB;  
        bmi.biSizeImage           =   0;  
        bmi.biXPelsPerMeter   =   0;  
        bmi.biYPelsPerMeter   =   0;  
        bmi.biClrUsed               =   0;  
        bmi.biClrImportant     =   0;    
  int       nNumColors;  
    if   (biBitCount   <   24)  
              nNumColors   =   1   <<   biBitCount;  
   
  LPBYTE*   pbi   =   new   BYTE[sizeof(BITMAPINFOHEADER)+nNumColors   *sizeof(RGBQUAD));  
  memcpy(pbi,   &bmi,   sizeof(BITMAPINFOHEADER);  
  LPBYTE*   lpvBits   =   new   BYTE[((((bmi.biWidth   *   bmi.biBitCount)   +   31)   &   ~31)   >>   3)   *   bmi.biHeight];  
  GetDIBits(hdc,   hBmpFile,   0,   bmi.biHeight,   lpvBits,   pbi,   DIB_RGB_COLORS);  
  然后用lpvBits和bm.bmBits比较就OK了  
   
   
   
  Top

7 楼bobob(静思)回复于 2005-08-04 11:29:20 得分 0

把两个dc按照异或画到一起Top

相关问题

  • 我有一副BMP,要在屏幕上找到与这个BMP完全相同的区域,有没有什么办法效率比较高的。
  • 如何把屏幕DC所画的内容写入文件(BMP)
  • 大家指点一下什么液晶屏幕比较好用?
  • 请问哪一款屏幕录像比较好,哪里有下载?
  • 请教:bmp与jpeg格式的比较!!(回贴即给分,决不食言)
  • 哪里有比较好的算法,把16位的BMP转换成256色的?
  • 比较
  • C#怎么实现抓取屏幕并存为Bmp图像?
  • 1.怎么在按纽上显示比较美观的字啊.2.怎么让对话框一开始就撑满整个屏幕啊?
  • 请介绍一下比较好的icon、bmp站点(用于软件的按钮和界面)

关键词

  • dc
  • bmi
  • bmfile
  • bitbmp
  • bm
  • 数组
  • hbmpfile
  • hbitmap
  • 调用
  • bitmap

得分解答快速导航

  • 帖主:kingbin
  • goodboyws

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo