全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1234
推到 Plurk!
推到 Facebook!

DIB的問題

尚未結案
co_ooy
一般會員


發表:2
回覆:1
積分:0
註冊:2004-07-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-14 00:44:22 IP:210.68.xxx.xxx 未訂閱
請問大大,我的程式目的是取出一張圖的DIB然後指給另一張圖,產生的問題及 程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Graphics::TBitmap *buf = new Graphics::TBitmap;
  buf->LoadFromFile("123.bmp");      void *P,*ImgSize;
  unsigned int HeaderSize;
  unsigned int ImageSize;
  int NumberOfColors;
  TBitmapFileHeader BitmapFileHeader;
  BITMAPINFO *BitmapInfo;
  TMemoryStream *MemoryStream = new TMemoryStream;      GetDIBSizes(buf->Handle, HeaderSize, ImageSize);
  P = AllocMem(HeaderSize);
  ImgSize = AllocMem(ImageSize);
  GetDIB(buf->Handle,buf->Palette,P,ImgSize);      BitmapInfo = (BITMAPINFO*)P;
  NumberOfColors = BitmapInfo->bmiHeader.biClrUsed;
  BitmapFileHeader.bfType = 0x4D42;
  BitmapFileHeader.bfReserved1 = 0;
  BitmapFileHeader.bfReserved2 = 0;
  BitmapFileHeader.bfOffBits = sizeof(TBitmapFileHeader) 
                               sizeof(TBitmapInfoHeader) 
                               NumberOfColors*sizeof(TRGBQuad);
  BitmapFileHeader.bfSize = BitmapFileHeader.bfOffBits BitmapInfo->bmiHeader.biSizeImage;
    MemoryStream->Write(&BitmapFileHeader,sizeof(TBitmapFileHeader));
    MemoryStream->Write(P,BitmapFileHeader.bfSize-sizeof(TBitmapFileHeader));//都是錯在這一行
    MemoryStream->Position = 0;        Image1->Picture->Bitmap->LoadFromStream(MemoryStream);
 
  MemoryStream->Free();
}
小弟還是新手,請各位大大不吝指教,謝謝
foreman
高階會員


發表:3
回覆:124
積分:190
註冊:2004-09-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-16 23:05:29 IP:218.172.xxx.xxx 未訂閱
co_ooy你好, 我將程式改成如下, 執行OK void __fastcall TForm1::Button1Click(TObject *Sender) {   Graphics::TBitmap *buf = new Graphics::TBitmap;   buf->LoadFromFile("123.bmp");      void *P,*ImgSize;   unsigned int HeaderSize;   unsigned int ImageSize;   int NumberOfColors;   TBitmapFileHeader BitmapFileHeader;   BITMAPINFO *BitmapInfo;   TMemoryStream *MemoryStream = new TMemoryStream;      GetDIBSizes(buf->Handle, HeaderSize, ImageSize);   //P = AllocMem(HeaderSize);   //ImgSize = AllocMem(ImageSize);   P= new BYTE[HeaderSize];   ImgSize= new BYTE[ImageSize];//改這兩行   GetDIB(buf->Handle,buf->Palette,P,ImgSize);      BitmapInfo = (BITMAPINFO*)P;   NumberOfColors = BitmapInfo->bmiHeader.biClrUsed;   BitmapFileHeader.bfType = 0x4D42;   BitmapFileHeader.bfReserved1 = 0;   BitmapFileHeader.bfReserved2 = 0;   BitmapFileHeader.bfOffBits = sizeof(TBitmapFileHeader)+                                sizeof(TBitmapInfoHeader)+                                NumberOfColors*sizeof(TRGBQuad);   BitmapFileHeader.bfSize = BitmapFileHeader.bfOffBits+BitmapInfo->bmiHeader.biSizeImage;     MemoryStream->Write(&BitmapFileHeader,sizeof(TBitmapFileHeader));     MemoryStream->Write(P,BitmapFileHeader.bfSize-sizeof(TBitmapFileHeader));//都是錯在這一行     MemoryStream->Position = 0;        Image1->Picture->Bitmap->LoadFromStream(MemoryStream);     MemoryStream->Free();   delete []ImgSize;//請加這三行   delete []P;   delete buf; } 我想AllocMem可能延續真實模式的malloc不能超過64k foreman
happymanfreeman
一般會員


發表:0
回覆:1
積分:0
註冊:2006-12-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-07 20:32:26 IP:124.90.xxx.xxx 未訂閱
系統時間:2024-05-08 17:07:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!