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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0827
初心者PNG形式の画像の表示7解決


初心者

リンク

2007/8/27(Mon) 16:50:50|NO.10718

透過情報のあるPNG形式画像を表示させたいのですが、
hspcvの使い方がわからず苦戦しています。
どうすればよいでしょうか?



この記事に返信する


2

リンク

2007/8/27(Mon) 21:00:10|NO.10724

ホレ
初心者ということで
#include "hspcv.as"
dialog "",16,"画像ファイル" ; 画像選択ダイアログを表示 if stat=0:stop ;キャンセルしたらとまる id=0 ;バッファIDを決めとく cvload refstr,id ;(表示されないけれど)ロードしとく cvgetimg id    ;ここで表示
これでPNGできるんじゃないかなこうゆうの使わんから慣れてないけど一応ね



初心者

リンク

2007/8/27(Mon) 21:37:37|NO.10725

一応表示は出来たのですが、半透明の部分がうまく表示されません…



GENKI

リンク

2007/8/27(Mon) 22:15:45|NO.10728

> 透過情報のあるPNG形式画像を表示させたいのですが、

透過情報を含むPNG画像を透過情報を反映させてないけど表示できているので2さんの回答は間違いではない。

> 半透明の部分がうまく表示されません…

でも、質問の意図としては、表示結果に透過色の情報を反映させたい…と。
それもαチャンネル対応で。
(言葉って難しい。)


hspcvは透過色には対応していなかったと思います。(してたらごめんなさい。)
別のPNGの透過色対応のプラグインを探さないといけないと思います。

PNG透過色対応のプラグインといえばルーチェさんのimgctlがありましたが、HSP2用です。
http://www.vector.co.jp/soft/win95/prog/se278411.html
αチャンネル対応となるとAMpng.hpiがありますが、これもHSP2用です。
どちらも入手可能ですがHSP3では使えるかどうか分かりません。

とりあえず、gmode命令の2や7を使って透過色を再現したほうが方が手っ取り早いと思います。




ちなみに、透過色を気にしないのならプラグインは必要ありません。

#include "mod_img.as" imgload "ファイル名"



osakana

リンク

2007/8/28(Tue) 07:18:23|NO.10735

> ルーチェさんのimgctlがありましたが、HSP2用です。

一応 C/C++, Visual Basic, Delphi用と書いてある
imgctl.dll 1.24 の方はHSP3からでも利用可能ですよ。

imgctl.hpi に付いている様なインポートファイルや
モジュールファイルは自分で用意しないといけないので面倒ではありますが。
(使う命令だけ定義しとけば十分ですけど)

αチャネルについては αブレンドを使用するための
PngAlphaPaste 関数がHSP3では使えないので直接は表示出来ない見たいです。
(PngAlphaPaste コールバック関数がCのソースで提供されているため)

PNG画像のαチャネル取得自体は出来るので、
最終的にαチャネル付き画像を表示するには
gmode 7 + gcopy から取得したデータを使う感じになると思います。

試しに作って見ました。
ファイル名をいれる所(2箇所)はそれぞれ書き変えて下さい。


// imgctl.dll が必要です。 #uselib "imgctl.dll" #cfunc ToDIB "ToDIB" str #cfunc PNGtoDIB "PNGtoDIB" str #cfunc PNGAtoDIB "PNGAtoDIB" str #func DIBtoDC "DIBtoDC" int,int,int,int,int,int,int,int,int #func DIBtoDCex2 "DIBtoDCex2" int,int,int,int,int,int,int,int,int,int,int,int #func HeadDIB "HeadDIB" int,var #func DeleteDIB "DeleteDIB" int #define SRCCOPY $00CC0020 #define HALFTONE $00000004 /* 背景描画 */ filename = "背景画像ファイル" hbg = ToDIB(filename) HeadDIB hbg, pbmih dupptr gx, varptr(pbmih)+4, 4, 4 dupptr gy, varptr(pbmih)+8, 4, 4 ; ウィンドウの大きさに合わせてコピー DIBtoDCex2 hdc, 0, 0, GINFO_WINX, GINFO_WINY, hbg, 0, 0, gx, gy, SRCCOPY, HALFTONE DeleteDIB hbg /* PNGからメインの画像とαチャンネル画像を取得 */ filename = "αチャンネル付きPNGファイル" ;PNG画像オンリー hdib = PNGtoDIB(filename) halp = PNGAtoDIB(filename) HeadDIB hdib, pbmih dupptr gx, varptr(pbmih)+4, 4, 4 dupptr gy, varptr(pbmih)+8, 4, 4 buffer 1, gx*2, gy DIBtoDC hdc, 0, 0, gx, gy, hdib, 0, 0, SRCCOPY ; gmode 7 用の左側画像(メイン) DIBtoDC hdc, gx, 0, gx, gy, halp, 0, 0, SRCCOPY ; gmode 7 用の右側画像(αチャンネルマスク) DeleteDIB hdib DeleteDIB halp /* 取得したデータを使ってピクセルアルファブレンドコピー */ gsel 0 gmode 7,gx, gy gcopy 1,0,0,gx, gy
私も詳くないので間違ってる事を
言っているかもしれません。



Kpan

リンク

2007/8/28(Tue) 20:58:49|NO.10741

もしPNG表示のためだけにHSPCVを使うのなら、プラグインのサイズが
半端なくでかいので、過去の資産を調べてみては?
(GIF特許問題が存在していた影響で、HSPでPNGを扱うためだけの
プラグインというのが、いくつかリリースされてる)
http://lhsp.s206.xrea.com/hsp_tips3.html#1



初心者

リンク

2007/8/28(Tue) 22:49:35|NO.10742

hspcvの他にもいろんな物があるんですね。
でも、色々な方法があるのは分かったんですが、
自分の勉強不足で分からない事だらけです…
とりあえず教えてもらった事を自分なりにやってみて、
どうしても分からない所があったら改めて質問する事にします。
面倒な質問だったかもしれませんが、
親切な回答をありがとうございました。



osakana

リンク

2007/8/29(Wed) 15:49:01|NO.10754

> imgctl.hpi に付いている様なインポートファイル
> ...は自分で用意しないといけないので

すでにヘッダファイルは、
Kpan さんが公開されてたんですね。(しらなかった・・・)



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