喫茶XRAYトップページ

[スレッド全体
]

[12817] Re:ImageMagickにて返信 削除
2019/5/7 (火) 08:30:46 SO
▼ Saraさん

>       MagickSetImageFormat(Lwand,Pchar(UTF8Encode('BMP3')));

https://qiita.com/yoya/items/3d588687a30175601885

BMPv4 で追加された RGBAMask で透明度に対応したらしいです。。。?

[12821] Re2:ImageMagickにて返信 削除
2019/5/7 (火) 09:51:00 SO
▼ Saraさん

> BMPv4 で追加された RGBAMask で透明度に対応したらしいです。。。?

https://imagemagick.org/script/formats.php

デフォルトでv4らしいので、
MagickSetImageFormat(Lwand,Pchar(UTF8Encode('BMP')));
でOKな気がします。

[12827] Re3:ImageMagickにて返信 削除
2019/5/7 (火) 17:22:57 Sara
▼ SOさん
▼ マスター

ご連絡ありがとうございます。
 
> > BMPv4 で追加された RGBAMask で透明度に対応したらしいです。。。?
>
> https://imagemagick.org/script/formats.php
>
> デフォルトでv4らしいので、
> MagickSetImageFormat(Lwand,Pchar(UTF8Encode('BMP')));
> でOKな気がします。



もともと
 MagickSetImageFormat(Lwand,Pchar(UTF8Encode('BMP')));
を使っていたのですが、上手くいかなくて何処かの記事でBMP3を見つけて
使ってみました。(BMPがVer4とは知らず・・(^^;)

しかし、いずれにしても

 PB := MagickGetImagesBlob(Lwand,@cnt);

だと、アルファチャンネルデータが消えてなくなる・・・ので、
(何か勘違いしていなければ・・・ 帰ってから再度試しますが)

で、

MagickBooleanType MagickWriteImagesFile(
    MagickWand* wand,
    FILE* file
)

を使って、CreateFileで FILE_ATTRIBUTE_TEMPORARY を指定して旨い事
できないかと試したものの、宣言の仕方が悪いのか例外が発生する・・・

ちなみに、上記の宣言はDelphiだとどうなるのでしょうか・・・(^^;



[12828] Re4:ImageMagickにて返信 削除
2019/5/7 (火) 17:42:53 SO
▼ Saraさん

>
> しかし、いずれにしても
>
>  PB := MagickGetImagesBlob(Lwand,@cnt);
>
> だと、アルファチャンネルデータが消えてなくなる・・・ので、
> (何か勘違いしていなければ・・・ 帰ってから再度試しますが)


そもそも、透過する色は指定してますか?
ぱっと見たソースだと指定してないように見えます。。。


> MagickBooleanType MagickWriteImagesFile(
>     MagickWand* wand,
>     FILE* file
> )
>
> を使って、CreateFileで FILE_ATTRIBUTE_TEMPORARY を指定して旨い事
> できないかと試したものの、宣言の仕方が悪いのか例外が発生する・・・
>
> ちなみに、上記の宣言はDelphiだとどうなるのでしょうか・・・(^^;


分かりません!!


[12829] Re5:ImageMagickにて返信 削除
2019/5/7 (火) 18:35:36 Sara
▼ SOさん こんばんわ

> > しかし、いずれにしても
> >
> >  PB := MagickGetImagesBlob(Lwand,@cnt);
> >
> > だと、アルファチャンネルデータが消えてなくなる・・・ので、
> > (何か勘違いしていなければ・・・ 帰ってから再度試しますが)
>
> そもそも、透過する色は指定してますか?
> ぱっと見たソースだと指定してないように見えます。。。


おぅ・・わかりづらくて、ごめんなさい。前提条件が無いですね・・・

ret := MagickReadImage(Lwand, PChar(UTF8Encode(FileName)));

で、テスト的に読み込みをしているのがアルファチャンネル付きPNGファイルです。

なので、そのままMagickWriteImageで書き出すとアルファチャンネル付きBMPに

なるわけですが、MagickGetImagesBlobでメモリに出力すると・・と言う話になるわけです。

もう少し、いじってみます。



[12830] Re6:ImageMagickにて返信 削除
2019/5/7 (火) 18:43:09 SO
▼ Saraさん

なんですかね?

HasAlpha := MagickGetImageAlphaChannel(Lwand) = MagickTrue;

HasAlphaはTrueを返すんですよね?

[12831] Re7:ImageMagickにて返信 削除
2019/5/7 (火) 18:46:32 Sara
▼ SOさん
>
> なんですかね?
>
> HasAlpha := MagickGetImageAlphaChannel(Lwand) = MagickTrue;
>
> HasAlphaはTrueを返すんですよね?



Trueになります。


なにか、大勘違いしてますかね・・・(^^;

[12832] Re8:ImageMagickにて返信 削除
2019/5/7 (火) 19:23:23 Sara
▼ SOさん
> >
> > なんですかね?
> >
> > HasAlpha := MagickGetImageAlphaChannel(Lwand) = MagickTrue;
> >
> > HasAlphaはTrueを返すんですよね?
>
>
> Trueになります。
>
>
> なにか、大勘違いしてますかね・・・(^^;



とりあえず、解決しました・・・


      PB := MagickGetImagesBlob(Lwand,@cnt);
      _TStream(mem).SetPointer(PB, cnt);
      Mem.Position := 0;
      Bmp.LoadFromStream(Mem);
      Bmp.SaveToFile('D:\test.bmp');

で、アルファチャンネル付きBMPが出力されることが確認できました。
Mem.SaveToFileでも正常にアルファチャンネル付きBMPになります。
(そりゃ、そうだ)


原因がわかりません・・・(^^;

今日テストしたら、24BitのBmpで出力されません・・・
PCの誤動作だったのでしょうか・・・

昨日は随分悩んだのですが・・・(^^;

と、いうわけで、大変お騒がせいたしました。m(_ _)m

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82