皆様、こんばんわ
最近、ImageMagickを使って遊んでいるのですが・・・
Bitmapへの変換で困っています。
単純な変換は以下でできます。
MagickWandGenesis;
Mem := TMemoryStream.Create;
try
cnt := 0;
Lwand := NewMagickWand;
ret := MagickReadImage(Lwand, PChar(UTF8Encode(FileName)));
if ret = 0 then exit;
HasAlpha := MagickGetImageAlphaChannel(Lwand) = MagickTrue;
MagickSetImageFormat(Lwand,Pchar(UTF8Encode('BMP3')));
New(PB);
PB := MagickGetImagesBlob(Lwand,@cnt);
_TStream(mem).SetPointer(PB, cnt);
Mem.Position := 0;
Bmp.LoadFromStream(Mem);
finally
Mem.Free;
DestroyMagickWand(Lwand);
end;
で、なにに困っているか・・・アルファチャンネル付きの画像を
上記で変換すると、綺麗さっぱりアルファチャンネルが抜け落ちます。
Mem.SaveToFile('D:\test.bmp');とすると、24Bit Bitmapになります。
問題は、 PB := MagickGetImagesBlob(Lwand,@cnt); です。
ここを、MagickWriteImage(Lwand,pchar(UTF8Encode('D:\test.bmp')));
とかすると、正常にアルファチャンネル付きBitmapが出来上がりますが、
ファイルに保存したくない・・・
MagickGetImagesBlobでアルファチャンネル付きでメモリに保存する方法って
あるんでしょうかね・・・
お分かりになる方がいらっしゃれば、ご教示いただけると幸いです。
|