• CImage 获取图片RGB 、图片高和宽;


     1 CImage img , img1 ,imDest;
     2     img1.Load( 图片路径);
     3     img.Load( 图片路径);
     4     为了防止图片失真,先处理一下在把图片显示出来
     5     SetStretchBltMode(pDC->m_hDC , HALFTONE); 
     6     SetBrushOrgEx( pDC->m_hDC , 0, 0, NULL);//第一个参数用什么dc画图就是它的m_hDC;比如
     7 
     8     *********************************************************************
     9 
    10     imDest.Create( pDoc->m_wdOrigWeigh , pDoc->m_wdOrigHeih , 32 , 0 );
    11     SetStretchBltMode(imDest.GetDC(), HALFTONE);//因为要用imDest来获取imDest.GetPixel();所以就填imDest.GetDC();
    12     SetBrushOrgEx(imDest.GetDC(), 0, 0, NULL);
    13     img1.StretchBlt(imDest.GetDC(), 0 , 0 , pDoc->m_wdOrigWeigh , pDoc->m_wdOrigHeih , 0 , 0 , nptWith , nPtHeig ,SRCCOPY );
    14     ************************************************************************
    15     img.Draw( pDC->GetSafeHdc() ,rt1.TopLeft().x , rt1.TopLeft().y , rt1.Width() , rt1.Height() , 0 , 0 , rt1.Width() ,rt1.Height() );
    16 
    17     2.在内存里获取图片的RGB
    18 
    19     GetRGB( CMapDefineView *pDefinedview ,CImage &img , int nPitWide , int nPitHeigh )//注意这里CImage &img传递的是引用,而不是对象,否则会弹出m_hDC== 0的警告
    20 
    21     {
    22         int nPtHeig = img1.GetWidth();
    23         int    nptWith = img1.GetHeight();
    24 
    25         imDest.Create( pDoc->m_wdOrigWeigh , pDoc->m_wdOrigHeih , 32 , 0 );//首先要创建一个CImage,规定了图片的大小。

           HDC hdc = imDest.GetDC();//下面要用共同获取的hdc,如果每个都直接用imDest.GetDC()的话就要释放一下DC,imDest.ReleaseDC();

            SetStretchBltMode(hdc, HALFTONE );//因为要用imDest来获取imDest.GetPixel();所以就填imDest获取的HDC ,为了防止创建的CImage里面图片失真,

            SetBrushOrgEx(hdc, 0, 0, NULL);//为了防止创建的CImage里面图片失真,

             imgGetRGB.StretchBlt(hdc, 0 , 0 , pDoc->m_wdOrigWeigh , pDoc->m_wdOrigHeih , 0 , 0 , nptWith , nPtHeig ,SRCCOPY );//把加载的图片按照大小贴进新创建的imDest中。其中 nptWith , nPtHeig 是图片原来的宽度和高度,pDoc->m_wdOrigWeigh , pDoc->m_wdOrigHeih 是目的高度和宽度;
    29 
    30 
    31         COLORREF colr;
    32         int nlen = 0;
    33         BYTE *Rbuf = new BYTE[ nPtHeig * nptWith ];
    34         BYTE *Gbuf = new BYTE[ nPtHeig * nptWith ];
    35         BYTE *Bbuf = new BYTE[ nPtHeig * nptWith ];
    36         for (int i = 0 ; i <pDoc->m_wdOrigHeigh; i ++)//注意是nPtHeig 而不是nptWith ,因为这里是一行一行的获取图片RGB 
    37 
    38         { 
    39 
    40 
    41 
    42             for ( int j = 0; j < pDoc->m_wdOrigWeigh; i ++ )
    43 
    44 
    45 
    46             {
    47                 colr = imDest.GetPixel( j , i );//注意j 和i 不能交换;
    48                 Rbuf[ nlen ] = GetRValue( colr )
    49                     Gbuf[ nlen ] = GetGValue( colr ) 
    50                     Bbuf[ nlen ] = GetBValue( colr )
    51                     nlen ++ ;
    52             }
    53         }
    54     }
  • 相关阅读:
    Navicat Premium 12安装及破解(四)
    ajax原理及应用(十六)
    为什么每次下载后必须关闭掉IO流(十五)
    FormData提交文件(十四)
    代理设计模式(三)
    单例模式(二)
    工厂模式(一)
    集采用的验证规则
    java泛型的理解
    spring中如何直接注入session和request对像
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3256868.html
Copyright © 2020-2023  润新知