DIB的問題 |
尚未結案
|
co_ooy
一般會員 發表:2 回覆:1 積分:0 註冊:2004-07-04 發送簡訊給我 |
請問大大,我的程式目的是取出一張圖的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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |