Я думаю, что это начнется примерно так:
var
lpbi: PBitmapInfoHeader;
begin
// Get DIB header info from DIB handle
lpbi := PBitmapInfoHeader(GlobalLock(hdIB));
end;
Тогда, если это 32-битное изображение, у него будет альфа-канал, который вы будете использовать для своих данных прозрачности.
Затем вы копируете данные RGB на линию сканирования объекта PNG, а альфа-данные - в линию альфа-сканирования.