如何显示得来的RGB数据?(200)

  • 主题发起人 主题发起人 LitterTiger
  • 开始时间 开始时间
L

LitterTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TImage里的canvas显示。 int format, width, height; width = edtWidth->Text.ToInt(); height = edtHeight->Text.ToInt(); if (!width || !height) return; imgPicture->Height = height; imgPicture->Width = width; for (int i=0; i<width; i++) for(int j=0; j<height; j++) imgPicture->Canvas->Pixels[j] = 0x000000ff;但是如果开始是10x10的分辨率,然后换成100x100,显示还是10x10. 我发现是因为canvas的cliprect还是10x10,没有变成100x100.clirect又是只读的。这个应该如何处理呢?
 
怎么没人回答呢?
 
看到一个帖子,怎么感觉dephi/bcb没有对bitmap头的封装呢?转帖:已成功利用 TMemoryStream,把 row data + bmp header 給塞進去,不過有三點值得注意:1. BCB 的 Help 當中描述 TPicture 有 LoadFromStream,結果非但不能使用,就連提示字都沒有出來,十分怪異,不知道是為什麼,所以就改用 TImage::TPicture::TBitmap::LoadFromStream( TStream* ) 給解決。2. 當使用 TImage::TPicture::TBitmap::LoadFromStream( TStream* ) ,記得把 TMemoryStream 的 Position 給歸零,例如: 檢視純文字版列印? TMemoryStream *memStream = new TMemoryStream(); // 設定大小與初始化(?) memStream->SetSize((width*3+append)*height+54); memStream->Clear(); // 寫檔頭與資料 memStream->Write(BMPHeader,54); memStream->Write(data,(width*3+append)*height); // 要把 Position 歸回零,這樣 Image 元件才可以從 stream 的頭開始讀 memStream->Position = 0; Image->Picture->Bitmap->LoadFromStream(memStream); delete memStream; // 養成好習慣 3. bmp 有一點限制是說:如果每一列的像素點不是 4 的倍數,就必須在後面補像素 ( 我是補零,不過補甚麼應該都沒差才對!! ),例如:24 位元(RGB) 的點,圖片寬度為 15 那麼一列就有 3 * 15 = 45 bytes 除以四的餘數 45 mod 4 = 1 每列需要補的像素個數 4 - 1 = 3 以前應該有描述,不過在此重做說明,也感謝本討論串給予建議的版友。
 

Similar threads

I
回复
0
查看
612
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部