|

楼主 |
发表于 2011-5-20 20:03:00
|
显示全部楼层
Re: 求助:怎么实现RGBA数据流显示并应用好ALPHA通道效果
我的实现代码
- function RGB2Color(RGB: TRGB): TColor;
- begin
- with rgb do
- begin
- Result := (Blue shl 16) or (Green shl 8) or Red;
- end; // with
- end;
- procedure TmainForm.btn55Click(Sender: TObject);
- var
- p: PChar;
- ms: TMemoryStream;
- bm: TBitmap;
- jpeg1: TJpegImage;
- c: TColor;
- A, R, B, G: byte;
- RGB1: TRGB;
- i, j: integer;
- begin
- p := GetLastImageData();//取数据流BUFF
- if p = nil then
- begin
- Logit('返回空指针!');
- exit;
- end;
- ms := TMemoryStream.Create;
- try
- ms.Write(p^, $2400);//写入Stream
- ms.Position := 0;
- bm := TBitmap.Create;
- bm.Height := 36;
- bm.Width := 64;//位图控件
- //bm.PixelFormat := pf24bit;
- for i := 0 to 35 do
- for j := 0 to 63 do
- begin
- ms.Read(A, 1);//从流里读出内容,四字节一像素
- ms.Read(R, 1);
- ms.Read(G, 1);
- MS.Read(B, 1);
- RGB1.Blue := B;
- RGB1.Red := R;
- RGB1.Green := G;
- c := RGB2Color(RGB1);//转换成COLOR
- bm.Canvas.Pixels[j, i] := c;//写入画板
- end;
- jpeg1 := TJpegImage.Create;
- jpeg1.Assign(bm);
- bm.Free;
- img1.Stretch := true;
- img1.Picture.Assign(jpeg1);
- jpeg1.SaveToFile('d:\text.jpg');
- jpeg1.Free;
- finally
- //Dispose(p);
- ms.Free;
- end;
- end;
复制代码 |
|