線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1261
推到 Plurk!
推到 Facebook!

影像合併問題?

尚未結案
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-06 16:40:23 IP:61.221.xxx.xxx 未訂閱
各位好: 我利用Graphics::TBitmap將很多張bmp的圖檔合成一張,合併完之後去查檔案,發現biCompression的值是3,可是我原先的圖是0,請問這如何去變更呢?我試過若 PixelFormat為pf24bit的話biCompression的值是0,但是我需要的是16bit的圖,請各位不吝指教,謝謝 Graphics::TBitmap *BMPDest=new Graphics::TBitmap; Graphics::TBitmap *BMPSour=new Graphics::TBitmap; BMPDest->Canvas->CopyMode=cmSrcCopy; BMPDest->PixelFormat=pf16bit; BMPDest->Width =100; BMPDest->Height=100; BMPSour->LoadFromFile("123.bmp"); BMPDest->Canvas->CopyRect(rect(0,0,50,50),BMPSour->Canvas,rect(0,0,50,50)); BMPSour->LoadFromFile("456.bmp"); BMPDest->Canvas->CopyRect(rect(50,0,100,50),BMPSour->Canvas,rect(0,0,50,50)); BMPDest->SaveToFile("789.bmp"); delete BMPDest; delete BMPSour;
fffhghgjh
一般會員


發表:2
回覆:33
積分:17
註冊:2004-12-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-07 18:56:54 IP:61.220.xxx.xxx 未訂閱
利用BCB做PixelFormat轉換 會存成X4R4G4B4的型式 就會有壓縮
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-10 13:07:04 IP:61.221.xxx.xxx 未訂閱
那有何方式可用呢?
fffhghgjh
一般會員


發表:2
回覆:33
積分:17
註冊:2004-12-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-11 19:14:24 IP:61.220.xxx.xxx 未訂閱

    DWORD buffer,bmp1Position,bmp2Position,bmpWidth,bmpHeight;
    WORD bufferwrite;
    int height,width;    Graphics::TBitmap *BMPDest=new Graphics::TBitmap;
Graphics::TBitmap *BMPSour=new Graphics::TBitmap;
BMPDest->Canvas->CopyMode=cmSrcCopy;    //BMPDest->PixelFormat=pf16bit;    BMPDest->Width =100;
BMPDest->Height=100;
BMPSour->LoadFromFile("123.bmp");
BMPDest->Canvas->CopyRect(rect(0,0,50,50),BMPSour->Canvas,rect(0,0,50,50));
BMPSour->LoadFromFile("456.bmp");
BMPDest->Canvas->CopyRect(rect(50,0,100,50),BMPSour->Canvas,rect(0,0,50,50));        TMemoryStream* pms = new TMemoryStream();
    BMPDest->SaveToStream(pms);
    pms->Position=10;
    pms->Read(&bmp1Position,4);
    bmp2Position=bmp1Position;
    pms->Position=10;
    pms->Read(&bmp2Position,4);
    pms->Position=18;
    pms->Read(&bmpWidth,4);
    pms->Position=22;
    pms->Read(&bmpHeight,4);
    pms->Position=28;
    bufferwrite=16;
    pms->Write(&bufferwrite,1);
    for(height=0;heightPosition = bmp1Position;
            pms->Read(&buffer,4);
            bufferwrite = ((buffer&0xF80000)>>9)|((buffer&0x00F800)>>6)|((buffer&0xF8)>>3);
            pms->Position = bmp2Position;
            pms->Write(&bufferwrite,2);
            bmp1Position  =3;
            bmp2Position  =2;
        }
        if(heightPosition = bmp2Position;
                pms->Write(&bufferwrite,2);
                bmp2Position  =2;
            }
        }
    }
    pms->Position=10;
    pms->Read(&bmp1Position,4);
    bmpWidth *=2;
    bmpWidth = bmpWidth (4-bmpWidth%4);
    buffer = bmp1Position   bmpWidth*bmpHeight;
    pms->Position=2;
    pms->Write(&buffer,4);
    pms->SetSize(buffer);
    BMPDest->LoadFromStream(pms);    BMPDest->SaveToFile("789.bmp");
delete BMPDest;
delete BMPSour;
 
這是自己利用程式做24bit轉成16bit 給你參考看看 發表人 - fffhghgjh 於 2005/01/11 19:16:57
系統時間:2024-05-20 20:38:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!