是否可以在不复制像素的情况下将TBitmap32对象转换为TBitmap(pf32bit)对象?
我发现有两种方法可以将TBitmap32复制到TBitmap,而无需明显地复制像素,但是可能是在引擎盖下复制了像素。或者,某种方法比另一种方法更好?知道WinAPI的人可以建议吗?
var bmp2: TBitmap32;
bmp: TBitmap;
h: HBitmap;
tag: tagBITMAP;
begin
bmp2 := TBitmap32.Create;
bmp2.LoadFromFile('in.bmp');
tag.bmType := 0;
tag.bmWidth := bmp2.Width;
tag.bmheight := bmp2.height;
tag.bmWidthBytes := bmp2.Width*4;
tag.bmPlanes := 1;
tag.bmBitsPixel := 32;
tag.bmBits := @bmp2.Bits[0];
h := CreateBitmapIndirect(tag);
bmp := TBitmap.Create;
bmp.PixelFormat := pf32bit;
bmp.Handle := h;
bmp.SaveToFile('out.bmp');
方法2
var bmp2: TBitmap32;
bmp: TBitmap;
x,y: Integer;
h: HBitmap;
bi : TBitmapInfo;
res : integer;
abitmap: HBitmap;
begin
bmp2 := TBitmap32.Create;
bmp2.LoadFromFile('in.bmp');
FillChar (bi,SizeOf(bi),0);
with bi.bmiHeader do
begin
biSize := SizeOf(bi.bmiHeader);
biWidth := bmp2.Width;
biHeight := bmp2.height;
biPlanes := 1;
biBitCount := 32;
biCompression := BI_RGB;
end;
bmp := TBitmap.Create;
aBitmap := 0;
try
aBitmap := CreateDIBitmap(GetDC(0), bi.bmiHeader, CBM_INIT, @bmp2.Bits[0], bi, DIB_RGB_COLORS);
bmp.handle := aBitmap;
bmp.SaveToFile('out.bmp');
finally
DeleteObject(aBitmap);
bmp.Free;
end;