喫茶XRAYトップページ

[▲前のスレッド]

[12455] PNGの透過処理返信 削除
2018/11/20 (火) 01:05:30 Sara
皆さん こんばんは

最近PNGの透過処理で悩んでいます・・・(笑)

で、何を悩んでいるのか・・・

GDI+でPNGを表示した場合とGraphicEx等で読込んでから

Windows.AlphaBlend()して表示した場合とで、画像の輪郭の感じが

随分違うというか・・・GDI+で描画した方は綺麗で

AlphaBlendが汚いといいうか・・・(^^;

そもそも、GDI+の場合はAlphaBlendするまでもなく

背景色を塗ったCanvas上に直接DrawImageするだけで

透過処理がされてしまうので、AlphaBlend側の

Alphaチャンネルの解釈の仕方の問題なのですが・・・

しかたがなく、Scanlineを使って、R,G,Bの各値にAをAndして描画し

なおかつ、Aの値が100以下であれば描画しないとかすれば、

かなり近い画像になるのですが、細い線が黒くなる・・・

Aの値を128程度まで上げると、細い線の情報が欠落する・・・

50程度まで下げると、輪郭が太くなる・・・

何か良い方法はないものでしょうか・・・

どなたかご教示願えれば幸いです。


[12456] Re:PNGの透過処理返信 削除
2018/11/20 (火) 11:44:22 Mr.XRAY
▼ Saraさん

> GDI+でPNGを表示した場合とGraphicEx等で読込んでから

PNG 画像ですか.
GraphicEx 使ったことないな〜.
PNG 画像と言えばこんな記事がありますが,
参考になる内容があるかな ?

[ Delphi 2009におけるグラフィック機能の強化点 ]
[ PNGのサポート ]
http://edn.embarcadero.com/article/39704#6PNG%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88


[12457] Re2:PNGの透過処理返信 削除
2018/11/20 (火) 13:05:33 Sara
▼ Mr.XRAYさん


マスター お久しぶりです。

>
> > GDI+でPNGを表示した場合とGraphicEx等で読込んでから
>
> PNG 画像ですか.
> GraphicEx 使ったことないな〜.
> PNG 画像と言えばこんな記事がありますが,
> 参考になる内容があるかな ?
>
> [ Delphi 2009におけるグラフィック機能の強化点 ]
> [ PNGのサポート ]
> http://edn.embarcadero.com/article/39704#6PNG%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88



まぁ例えの一つとして、GraphicExを出しましたが・・・
読込コンポーネントはこれだけではなくて・・・
GFLやVampyre Imaging LibraryやLeadToolsやWICやSusie Plugin等

使えそうなものは全て使っています。(そういう妙なプログラムを作っている)

で、PNG等のアルファチャンネル付きの画像を読み込んだ際の描画を統一したいと。

今までは概ね統一されていたのです・・・GDI+を使っていなかったので・・・(^^;

しかも、GDI+のPNG描画が非常に綺麗だと・・・こっちに合わせたいわけで・・・


もう少し、いろいろ考えてみます。

[12458] Re3:PNGの透過処理返信 削除
2018/11/20 (火) 17:28:58 Mr.XRAY
▼ Saraさん

> 今までは概ね統一されていたのです・・・GDI+を使っていなかったので・・・(^^;

なんでだべ ?
興味ありますね.なんか分かったら教えてね.お願い...
もしかしたらアンチエイリアスの関係かな ?

http://mrxray.on.coocan.jp/Delphi/GDIPlusSamples/G030_GDIPlus_Interpolation.htm


[12460] Re4:PNGの透過処理返信 削除
2018/11/20 (火) 18:33:46 Sara
▼ Mr.XRAYさん
> ▼ Saraさん
>
> > 今までは概ね統一されていたのです・・・GDI+を使っていなかったので・・・(^^;
>
> なんでだべ ?
> 興味ありますね.なんか分かったら教えてね.お願い...
> もしかしたらアンチエイリアスの関係かな ?
>
> http://mrxray.on.coocan.jp/Delphi/GDIPlusSamples/G030_GDIPlus_Interpolation.htm



私もアンチエイリアスかとも思ったのですが、そもそも、該当の画像は100%表示の

状態で、件の状況になりますので、関係なさそうです・・・

まぁ、現状行っているAlpha値による間引き(?)も、すべての画像で適応可能か

と言うと、なんとも言えないので、もっと真っ当な手段があると思うのです。

引き続き調べてみますが・・・誰か何か知りませんかね・・・(^^;


[12464] Re5:PNGの透過処理返信 削除
2018/11/21 (水) 23:46:00 Sara
マスター 解決しました。

https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/advanced/alpha-blending-lines-and-fills

ここに、計算式が書いてありました。(^^)

この計算式をScanLineの各要素で計算して保存しなおせば、GDI+と同等の表示になります。

あぁ、すっきりした(^^)


[12465] Re6:PNGの透過処理返信 削除
2018/11/22 (木) 06:53:51 Mr.XRAY
▼ Saraさん

> ここに、計算式が書いてありました。(^^)

おおっ !! よくぞ見つけましたね.
すげぇ.
そういうことだったんですか.なるほど.

> あぁ、すっきりした(^^)

ハハハッ.本当にお疲れ様でした (^^)


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