gpt4 book ai didi

delphi - DIB 到 Tbitmap 代码操作以适应 PNG 图像?

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

我使用此代码将 DIB 转换为 TBitmap,那么我如何操作此代码以适合 PNG 图像(保留其透明度)?我厌倦了将透明属性设置为 true,但似乎代码是为 256 色位图编写的。

代码来源:Here

VAR
BitCount : INTEGER;
BitmapFileHeader: TBitmapFileHeader;
BitmapInfo : pBitmapInfo;
DIBinMemory : Pointer;
MemoryStream : TMemoryStream;
NumberOfColors : INTEGER;
BEGIN
RESULT := TBitmap.Create;

DIBinMemory := GlobalLock(hDIB);
TRY
BitmapInfo := DIBInMemory;
NumberOfColors := BitmapInfo.bmiHeader.biClrUsed;
BitCount := BitmapInfo.bmiHeader.biBitCount;
IF (NumberOfColors = 0) AND (BitCount <= 8)
THEN NumberOfColors := 1 SHL BitCount;

WITH BitmapFileHeader DO
BEGIN
bfType := $4D42; // 'BM'
bfReserved1 := 0;
bfReserved2 := 0;
bfOffBits := SizeOf(TBitmapFileHeader) +
SizeOf(TBitmapInfoHeader) +
NumberOfColors*SizeOf(TRGBQuad);
bfSize := bfOffBits + BitmapInfo.bmiHeader.biSizeImage;
END;

MemoryStream := TMemoryStream.Create;
TRY
MemoryStream.Write(BitmapFileHeader, SizeOf(TBitmapFileHeader));
MemoryStream.Write(DIBInMemory^,
BitmapFileHeader.bfSize - SizeOf(TBitmapFileHeader));
MemoryStream.Position := 0;
RESULT.LoadFromStream(MemoryStream)
FINALLY
MemoryStream.Free
END

FINALLY
GlobalUnlock(hDIB);
GlobalFree(hDIB)
END

最佳答案

您可以查看PngComponentsPngFunctions.pas 单元包含将任何 TGraphic 转换为 png 图像的方法。当您使用 TPngImagelist 标记您的问题时,您可能已经在使用这个库了。

关于delphi - DIB 到 Tbitmap 代码操作以适应 PNG 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295823/

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