<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    CxImage的使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    1、首先從此處下載源代碼

    http://www.codeproject.com/KB/graphics/cximage.aspx

    2、然后將里面的工程全部編譯一下,我覺得應該是生成對應的庫。

    3、然后用vc建個工程,同時將源代碼里面除了Demo這些文件夾,全部考到新建工程的同一目錄。

    4、接下來就是最麻煩的配置了:

         |- C/C++
    |   |- Code Generation
    |   |   |- Use run-time library : Multithreaded DLL (must be the same for 
    |   |   |  all the linked libraries)  //應該只要是多線程DLL即可,DEBUG的也行
    |   |   |- Struct member alignment : must be the same for all the linked libraries
    |   |- Precompiled headers : not using precompiled headers)

     

    配置lib庫: 
    Project->Setting->link選項卡: 
    在“對象/庫模塊”下添加 
    ../png/Debug/png.lib ../jpeg/Debug/jpeg.lib ../zlib/Debug/zlib.lib ../tiff/Debug/tiff.lib ../jbig/Debug/jbig.lib ../jasper/Debug/jasper.lib  ../cximage/Debug/cximage.lib。


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/skyair624/archive/2008/10/01/3008014.aspx

    在c/c++的附加包含路徑里面填上:../CxImage(我也不知道這是干什么的)

     

    5、添加頭文件

    #include "../CxImage/ximage.h"
    #include "../CxImage/ximacfg.h"

    6、關鍵代碼:

    CxImage image;
     image.Load(_T("abc.bmp"), CXIMAGE_FORMAT_BMP); 
     if (image.IsValid()){
           cout << "ok" << endl;
        image.Save(_T("image.jpg"), CXIMAGE_FORMAT_JPG);// 把壓縮后的圖像以jpg文件類型保存起來。
     }

     

    首先在工程目錄下你得放一個abc.bmp的圖片,可以用下面這個代碼產生:

    void CapScreen(char filename[])
    {
        CDC *pDC;
        pDC = CDC::FromHandle(GetDC(GetDesktopWindow()));
     if(pDC == NULL) return;
        int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);
        int Width = pDC->GetDeviceCaps(HORZRES);
        int Height = pDC->GetDeviceCaps(VERTRES);

        CDC memDC;
        if(memDC.CreateCompatibleDC(pDC) == 0) return;
        
        CBitmap memBitmap, *oldmemBitmap;
        if(memBitmap.CreateCompatibleBitmap(pDC, Width, Height) == NULL) return;

        oldmemBitmap = memDC.SelectObject(&memBitmap);
     if(oldmemBitmap == NULL) return;
        if(memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY) == 0) return;

        BITMAP bmp;
        memBitmap.GetBitmap(&bmp);
        
        FILE *fp = fopen(filename, "w+b");

        BITMAPINFOHEADER bih = {0};
        bih.biBitCount = bmp.bmBitsPixel;
        bih.biCompression = BI_RGB;
        bih.biHeight = bmp.bmHeight;
        bih.biPlanes = 1;
        bih.biSize = sizeof(BITMAPINFOHEADER);
        bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;
        bih.biWidth = bmp.bmWidth;
        
        BITMAPFILEHEADER bfh = {0};
        bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;
        bfh.bfType = (WORD)0x4d42;
        
        fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);
        
        fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);
        
        BYTE * p = new BYTE[bmp.bmWidthBytes * bmp.bmHeight];

        GetDIBits(memDC.m_hDC,
            (HBITMAP) memBitmap.m_hObject,
         0,
         Height,
         p,
         (LPBITMAPINFO) &bih,
         DIB_RGB_COLORS);

        fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);

        delete [] p;

        fclose(fp);

        memDC.SelectObject(oldmemBitmap);
    }

    7、最后運行就可以了

    我的可以將5M的bmp文件壓縮成168K的jpeg

    8、note:

    image.Load(_T("image.bmp"), CXIMAGE_FORMAT_BMP); 一定要這樣用,否則會報錯的,這是我在

    http://topic.csdn.net/u/20081214/21/D012F730-C165-4A4C-9B01-3E449C7CB48B.html發現的。

    可能顯得很笨拙,折騰我3個小時,跟大家分享一下吧!干軟件的要團結!

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全