gpt4 book ai didi

delphi - 如何将 TCanvas 包裹在现有的像素数据周围?

转载 作者:行者123 更新时间:2023-12-03 15:58:16 27 4
gpt4 key购买 nike

问题

我有一个 32 位像素数据数组,用于保存位图图像。

TPixel = packed record
B: Byte;
G: Byte;
R: Byte;
A: Byte;
end;

Size = MyBitmapWidth * MyBitmapHeight;

MyBitmapData : array[0..Size-1] of TPixel;

是否可以创建一个新的 TCanvas 对象并将其附加到我现有的像素数据? Canvas 对象还需要为其分配一个句柄。

背景

我正在使用创建位图数据(作为 32 位像素数组)的第三方库。我想在另一个以 TCanvas.Handle 作为参数的函数中使用相同的像素数据。

最佳答案

根据数组中数据的方向,您可能需要通过以下方式更改方向:pscanLine32[j].rgbReserved := Arr[i * 宽度 + 高度 - j].A;

type
TPixel = packed record
B: Byte;
G: Byte;
R: Byte;
A: Byte;
end;

TMyBitmapData = array of TPixel;

type
pRGBQuadArray = ^TRGBQuadArray;
TRGBQuadArray = ARRAY [0 .. $EFFFFFF] OF TRGBQuad;

Procedure FillBitMap(var bmp: TBitMap; Arr: TMyBitmapData; Width, Height: Integer);
var
pscanLine32: pRGBQuadArray;
i, j: Integer;
begin
if not Assigned(bmp) then
bmp := TBitMap.Create;
bmp.PixelFormat := pf32Bit;
bmp.ignorepalette := true;
bmp.Width := Width;
bmp.Height := Height;
for i := 0 to bmp.Height - 1 do
begin
pscanLine32 := bmp.Scanline[i];
for j := 0 to bmp.Width - 1 do
begin
pscanLine32[j].rgbReserved := Arr[i * Width + j].A;
pscanLine32[j].rgbBlue := Arr[i * Width + j].B;
pscanLine32[j].rgbRed := Arr[i * Width + j].R;
pscanLine32[j].rgbGreen := Arr[i * Width + j].G;
end;
end;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
MyBitmapWidth: Integer;
MyBitmapHeight: Integer;
Size: Cardinal;
MyBitmapData: TMyBitmapData;
bmp: TBitMap;
x: Integer;
begin
MyBitmapWidth := 100;
MyBitmapHeight := 100;
Size := MyBitmapWidth * MyBitmapHeight;
SetLength(MyBitmapData, Size );

for x := 0 to MyBitmapWidth - 1 do
begin
MyBitmapData[x * MyBitmapWidth + x].A := 255;
MyBitmapData[x * MyBitmapWidth + x].R := 255;
end;


bmp := TBitMap.Create;
try
FillBitMap(bmp, MyBitmapData, MyBitmapWidth,MyBitmapHeight );
Image1.picture.Assign(bmp);
finally
bmp.Free;
end;

end;

关于delphi - 如何将 TCanvas 包裹在现有的像素数据周围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com