HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0517
影の匠gcopyで透過pngを扱うとpicload単体で扱うものとは別のものになってしまう8解決


影の匠

リンク

2015/5/17(Sun) 22:46:35|NO.69255

質問に答えていただけると大変ありがたいです。

---前置き(読み飛ばして構いません)---
HSP3.32でpng形式は透過を含んでpicloadで対応できる様になりました。
ですから、当然gcopyやgmode、gzoomでも対応しているという風に思っておりました。
しかし、それは私の思い込みだったようです。
picload単体で画像を扱うと、こちらが望んだ結果が出るにもかかわらず、gocpyを挟んだ瞬間、アルファ値が適用されているものの透明ではなく白の濃度として扱われるようになってしまったのです。

---本筋---
そこで質問です。
どのように手を加えればアルファ値を透過として認識させ、gcopyやgzoomなどのg〜系の命令で扱うようにできるでしょうか。
また、できなければどのような大体手段を用いて透過PNGを透過として扱い、操作がでしょうか。

wxs = 640 : wys = 480 screen 0,wxs,wys ;背景は緑 color ,255 : boxf ;bufferに画像を取り込む buffer 1 picload "test.png",1 ;画像を貼る gsel 0 gcopy 1,0,0,wxs,wys



この記事に返信する


影の匠

リンク

2015/5/17(Sun) 22:49:00|NO.69256

透過画像はこちらです。
http://xfs.jp/GDQTEB



スペース(HSP歴3年)

リンク

2015/5/17(Sun) 23:01:30|NO.69257

こちらのソフトを使い、専用の画像を作成します。
http://mclab.uunyan.com/dl/dl34.htm

次に、gmode7(アルファブレンドモード)でコピーを行えば透過された状態でコピーされます。



影の匠

リンク

2015/5/17(Sun) 23:31:19|NO.69258

んー、gmode 7について調べてもしっくり来るものがなかったので質問します。
gmode 7 を加えたらシステムエラーを吐き出してしまいます。
どこが悪いのでしょうか。
変換した画像:http://xfs.jp/FbJXjY

wxs = 640 : wys = 480 screen 0,wxs*2,wys ;背景は緑 color ,255 : boxf ;bufferに画像を取り込む buffer 1,wxs*2,wys picload "test.bmp",1 ;画像を貼る gsel 0 gmode 7,wxs*2,wys gcopy 1,0,0,wxs*2,wys



スペース(HSP歴3年)

リンク

2015/5/17(Sun) 23:38:09|NO.69259

gcopyでコピーする範囲はwxs(640)です。*2をする必要はありません。
うろ覚えですが、gmodeは第三パラも指定しなきゃいけなかったような。
gmode 7,wxs*2,wys,255のほうが良かった気がします



影の匠

リンク

2015/5/17(Sun) 23:47:05|NO.69261

なるほど、第三パラメータを255で入れたらシステムエラーを吐き出さなくなりました。
これで解決できました。
ありがとうございます。



影の匠

リンク

2015/5/17(Sun) 23:47:48|NO.69262

解決印



名無し

リンク

2015/5/19(Tue) 00:38:10|NO.69285

解決したようだけど追記
変換ツールにぶっこまず自前で計算できるスクリプトもあるんやで……
これを使えば、透明pngしかなくても中間ファイル経ずに使えるから便利かも
http://fe0km.blog.fc2.com/blog-entry-45.html



nora

リンク

2015/5/19(Tue) 03:00:19|NO.69288

αチャネルをHSPで使うならArtlet2Dを使うのがいいと思います。
gmode7を使う場合も専用画像を事前に用意することなくArtlet2Dでその場で作れます。

#include "a2d.hsp" alCreateImageByFile 0,dir_exe+"\\sample\\hgimg4\\res\\ball64.png" if stat=-1:dialog "load error":end wid=1;対象ウインドウID x=alGetWidth() y=alGetHeight() screen wid,x*2,y ;普通はbufferでつくる cmatrix(MAT_R) = 1.0, 0.0, 0.0, 0.0, 0.0 cmatrix(MAT_G) = 0.0, 1.0, 0.0, 0.0, 0.0 cmatrix(MAT_B) = 0.0, 0.0, 1.0, 0.0, 0.0 cmatrix(MAT_A) = 0.0, 0.0, 0.0, 0.0, 1.0 alCopyModeColorMatrix cmatrix ;アルファチャネルを無効にした画像を作成 alCopyImageToScreen 0,wid,0,0,x,y cmatrix(MAT_R) = 0.0, 0.0, 0.0, 1.0, 0.0 cmatrix(MAT_G) = 0.0, 0.0, 0.0, 1.0, 0.0 cmatrix(MAT_B) = 0.0, 0.0, 0.0, 1.0, 0.0 cmatrix(MAT_A) = 0.0, 0.0, 0.0, 0.0, 1.0 alCopyModeColorMatrix cmatrix ; アルファチャネルをグレースケール化した画像を作成 alCopyImageToScreen 0,wid,x,0,x,y alResetCopyMode redraw 1 gsel 0 picload dir_tv+"\\bg05.jpg" gmode 7 gcopy 1,0,0,x,y



ONION software Copyright 1997-2021(c) All rights reserved.