CxImage.GetBits()使用


現在在改一個別人的項目,用CxImage讀取圖片后,需要轉化為原始的BYTE*數據,以便加快處理速度。

於是用到了CxImage類的GetBits方法,但在其在線文檔中一查,嚇了一跳——文檔的內容只有一句話“pointer to the image pixels. USE CAREFULLY” 。小心使用~~小心~~小心~~

再在網上找資料,找到了   http://blog.csdn.net/wu_xiangwei/article/details/5096529  ,這篇只能對8位的圖片進行處理,而現在工業生產上的圖片至少是24位或32位,幸好自己對圖片的編碼有所了解,於是將其改成24位的版本,用來讀取JPG圖片。

CxImage inImage(fileName,CXIMAGE_FORMAT_JPG);
int w=((((24 * inImage.GetWidth()) + 31) / 32) * 4); 
TwoDimesionArray<RGBQUAD> colors(inImage.GetWidth(),inImage.GetHeight());

for (int j=0;j<inImage.GetHeight();++j)
{
    for (int i=0;i<inImage.GetWidth();++i)
    {
            RGBQUAD c;
            BYTE *b=   bs+(inImage.GetHeight()-1-j)*  w  +i*3;
            c.rgbBlue=*(b);
            c.rgbGreen=*(b+1);
            c.rgbRed=*(b+2);
            //c.rgbReserved=*bs++; 
            colors.SetValue(i,j,c);
     }
 }
 ImageIO writeImage;
 writeImage.WriteBmp(colors,"D:\\z.bmp");
 outImage.Save(outFileName,CXIMAGE_FORMAT_JPG);

關鍵的代碼在兩個for循環中獲取BYTE*b的代碼。

TwoDimesionArray的使用見 http://www.cnblogs.com/xiangism/archive/2012/08/31/2665092.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM