zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    [转载]MAXIMO数据收集的要素探究
    cmctrl和lsnrctl
    word2007如何从第三页开始插入页码(转)
    广东电信测网速软件下载地址
    投标书如何写?(转)
    sql server 2000安装中出现:command line option syntax error,type command/? for help解决方法(转)
    LAPACK(2)——使用基础
    LAPACK(1)——安装与测试
    Ubuntu11.04网络配置与问题排除
    LAPACK(4)——矩阵特征值和特征向量的求解
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3256868.html
Copyright © 2011-2022 走看看