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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0725
わからんぽhsp3で画像の色変化12未解決


わからんぽ

リンク

2006/7/25(Tue) 10:12:54|NO.1549

hsp3で、画像を表示するときに、
元の画像の色を赤っぽくとか青っぽく変えて表示させことはできますか?
キャラの色を、タイプ別に色を変えて表示させたいんです。
HSP3のプラグインが少なくて、探してもわかりません。
gcopyぐらい高速で、
元の画像に色を変えたものを用意するとか以外の方法で
できる方法があったら教えてください。



この記事に返信する


I386

リンク

2006/7/25(Tue) 10:51:09|NO.1550

かなり原始的ですが、pgetで色を取得し、その色を変更してpsetで上書きしてます。
ただし極端に色が変わるので、その色の濃淡しか出ませんが…
もし目の色だけ全て青にしたい場合などには別々の画像を用意するのが手っ取り早いでしょう。


screen 0,64*7,64,0 ;画面初期化 title "キャラを変える" cls 4 color 255,255,255 ; | circle 0,0,64,64 ; | color 128,128,128 ;<|キャラ描画(64*64) circle 16,16,24,32 ; | circle 40,16,48,32 ; | buffer 1,64,64,0 ;バッファー画面を用意 repeat 6 ;あと6つ作るので6回ループ c=cnt pos 0,0 gcopy 0,0,0,64,64 ;先ほどのキャラをコピー x=0 repeat 64 y=0 repeat 64 pget x,y ;色を取得 ;/条件分岐により色を変える r=ginfo_r : g=ginfo_g : b=ginfo_b if c=0 : color r,0,0 if c=1 : color r,g,0 if c=2 : color 0,g,0 if c=3 : color 0,g,b if c=4 : color 0,0,b if c=5 : color r,0,b pset x,y ;描画 y+ loop x+ loop gsel 0,0 ;描画先を変更 pos c*64+64,0 gcopy 1,0,0,64,64 ;変更後のキャラをコピー gsel 1,0 loop



かきしす

リンク

2006/7/25(Tue) 14:06:00|NO.1555

考え方は I386さんと同じようなものですが
色減算コピーを使うことで、一応リアルタイム演算が可能です。

ただ、これでもgcopy3回分+アルファの処理時間がかかるので、
スピードを優先するなら この方法を使うにしても、
あらかじめバッファに色々な色の濃さのキャラクターを確保しておく方法
(元の画像の色違いを、計算で用意する)
・・・のほうが良さそうですね。(メモリは食いますが・・・)

screen 0,320,240,,0,0;メイン画面
screen 1,120,64,,320,0:title "元";キャラクター用バッファ
color 0,0,0:boxf 0,0,64,64
color 255,255,50:circle 0,0,64,64,1
color 128,50,0:pos 8,4:mes"へ へ\nの の\n ▼"
;↑↑↑キャラクター設定
screen 2,120,64,,320,100:title "減算色";減算色用バッファ
screen 3,120,64,,320,200:title "減算後";キャラクター色合成バッファ
; screen 1〜3 は、解説用『screen』としているが
;実際には画面に表示されない『buffer』を使う。

repeat 20
repeat 180
y=120.0+cos(cnt/4)*10
gsel 2: color 0,cnt,cnt :boxf 0,0,64,64
;↑赤っぽくするために、減算色は赤以外の色成分を上げる。
gsel 3:gmode 0:gcopy 1,0,0,64,64
;合成用バッファに、元のキャラクターをコピーしてから・・・
gmode 6,,,255:gcopy 2,0,0,64,64
;減算色を 色減算コピー。
;赤以外の色を減算するので、キャラは赤っぽくなる。
gsel 0:gmode 2
redraw 0
color 0,128,0:boxf 0,0,320,240
pos 128,y
gcopy 3,0,0,64,64
redraw 1
await 3
loop
loop
end



わからんぽ

リンク

2006/7/25(Tue) 14:20:00|NO.1556

レスありがとうございます。
pset,pgetはスピードがちょっと遅いようでした。
かきしすさんの方法と似てるんですが、
一フレームで異なる色のキャラを大量に表示させる必要があるんです。
下のスクリプトでは、
「作業領域を塗りつぶす」->「元画像を作業領域にコピーする」->
「色を減算する」->「表示画面にコピーする」
の四つの公定がありますが、マスクを使うか何かして
これをもっと高速化できる方法かプラグインはないでしょうか?


#include "hspext.as"
cls 4:gmode 2,16,16
color 255,255,255
mes "●▲★ <-元の画像(これは変えたくない)"
mes "    <-変換に使う領域は最小限にしたい"
repeat 1000
color 0:boxf 0,16,16,32
pos 0,16:gcopy 0,rnd(3)*16,0
pos 0,16:gfini 16,16:gfdec rnd(256),rnd(256),rnd(256)
pos rnd(640),rnd(400)+80:gcopy 0,0,16
loop
redraw:stop



かきしす

リンク

2006/7/25(Tue) 18:13:32|NO.1560

すみません。
今ゆとりが無くなって、実験できないんですが、
HGIMG3を使って、2Dスプライトに対してライトを設定してみたらどうでしょう?
もしかしたら3Dポリゴンにしか有効じゃないかもしれないけど・・・
資料には、2Dに対しても3Dに対しても共通の命令が使用できるようなことが書いてあるんで。

もっとも、今現在gcopyを使う方法でかなり作成してたら
HGIMG3を使うとなると、描画系はほとんど作り直しになっちゃいますが。



トホホッティー

リンク

2006/7/25(Tue) 18:51:29|NO.1561

こんばんは、トホホッティーです。
ボックス画像を加算コピーさせる方法はどうですか?


screen 0 cls 4 picload "gph1.bmp" buffer 3 color 255,0,0 boxf 0,0,64,64 gsel 0 gmode 5,,,128 ;128を増やすとより赤くなります。 pos 0,0 gcopy 3,0,0,64,64 bmpsave "gph2.bmp" end



トホホッティー

リンク

2006/7/25(Tue) 19:29:33|NO.1562

あっ、これ以外の方法でしたね。
でも機能だけを追求するならこの方法でもいいのでは?



あげなす

リンク

2006/7/25(Tue) 20:30:00|NO.1564

>>1556
redraw 0とredraw 1 を使えばある程度高速化できますが…



Mizki_F

リンク

2006/7/25(Tue) 23:11:29|NO.1565

赤くするサンプルを書いてみました。


ごめんなさい、ジョークです(^^;


screen 0,200,200,0 : cls 4 pos 70,88 color 255,255,255 mes "元の画像" color 0,0,0 gmode 4,200,200,100 buffer 1,200,200,0 : cls 4 randomize : bloodNum=rnd(40)+10 dim bloodSize,bloodNum dim bloodPosX,bloodNum dim bloodPosY,bloodNum repeat bloodNum bloodSize(cnt)=rnd(20)+3 : bloodPosX(cnt)=rnd(200) : bloodPosY(cnt)=-rnd(20)-10 loop color 255,0,0 repeat 200 redraw 0 gsel 1,0 for n,0,bloodNum,1 circle bloodPosX(n),bloodPosY(n),bloodPosX(n)+bloodSize(n),bloodPosY(n)+bloodSize(n),1 bloodPosY(n)++ next gsel 0,0 : pos 0,0 : gcopy 1,0,0,200,200 wait 10 redraw 1 loop stop



Drip

リンク

2006/7/26(Wed) 02:00:04|NO.1567

Dripです。

 わからんぽさん、こんにちは。
キャラクタの配色パターンをリアルタイムに変更して描画するのは、
用途に応じて様々なやり方が考えられます。
今回はそのうちのひとつとしてキャラクタの服、ヘアカラー、肌の色などを
リアルタイムに変更しながら描画するケースのサンプルを上げてみます。

http://briefcase.yahoo.co.jp/bc/hsp_dripsat/
-> HSP3:リアルタイ... (HSP3:リアルタイム配色パターン変更)
 をダウンロードしてください。

この処理はかなり自由度の高い配色変更が行えますが、
処理的にはかなり遅いものになります。用途に合わせて自分なりに改造し、
速度の向上を目指してください。



レヴィン

リンク

2006/7/26(Wed) 10:15:00|NO.1570

プラグインを使用してもいいなら、方法があります。
hmm.dllを使って下さい(簡単に探せるのでDL場所はカットします)。


#include "hmm.as" dginit ;プラグイン初期化 dgscreen 640,480,0,32 ;ウィンドウ作成 dgbuffer 3 dgloadfname "任意の画像ファイル",3 dggsel 0 *main await 0 dgcolor 0,0,0,255:dgclear ;画面クリア(0,0,0の黒で) dgcolor 255,128,128,255 ;←ここで色味を変える dgpos (任意の表示X座標),(任意の表示Y座標) dgrect (任意のコピーX開始点),(任意のコピーY開始点),(任意のコピーXサイズ),(任意のコピーYサイズ) dgggcopy 3,0 dgredraw ;画面更新 goto *main

dgcolor 255,128,128,255で色味を変えられます。
ちなみにdgcolor 赤,緑,青,透明度の順です。
なお、元の画像の強くした色が暗い(たとえば0,0,255の画像で赤みをいくら強
くしても赤くならない)と色がうまく変わらないので注意して下さい。

その他の各種命令の詳しい内容はマニュアルを参照して下さい。



トホホッティー

リンク

2006/8/1(Tue) 20:12:54|NO.1702

解決しましたか?



GENKI

リンク

2006/8/1(Tue) 20:59:58|NO.1706

> 元の画像の色を赤っぽくとか青っぽく変えて表示させことはできますか?
> キャラの色を、タイプ別に色を変えて表示させたいんです。

ゲーム用の原始的な方法ですが…。

・あらかじめ色違いのキャラクターの画像を作っておく。
・パレットカラーを使う。



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