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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1120
さーす画像を縁取りして表示したい5解決


さーす

リンク

2015/11/20(Fri) 01:17:04|NO.73139

例として、白色バックに黒色の●が描かれた画像(test.bmp)を用意したとします


screen 0,500,500 buffer 0 picload "test.png" *main redraw 0 color 255,255,0 boxf 0,0,500,500 gmode 4,,,255 color 255,255,255 pos 200,200 gcopy 1,0,0,500,500 redraw 1 await 16 goto *main

このようにした場合、メイン画面には緑色の背景に黒の●が描画される状態になるわけですが、
この黒の●を、指定の色で縁取りして表示するにはどういった方法がありますでしょうか??
予め別色の●の画像を用意しておいて、4方に重ねて描画するといった方法では凝った画像を用意した場合
結構な手間になってしまい、別の画像を用意せずにどうにか縁取り出来ないか試行錯誤しております・・・



この記事に返信する


さーす

リンク

2015/11/20(Fri) 01:19:09|NO.73140

訂正)
× test.bmp
○ test.png

凡ミス申し訳ありません・・・



とおりすがり

リンク

2015/11/20(Fri) 10:30:51|NO.73149

●ってことは円だからcircle命令使ってやればいいんじゃね?



k

リンク

2015/11/20(Fri) 13:02:08|NO.73157

>別色の●の画像を用意しておいて
まず黒の●を読み込んでそれをベースにして
スプリクトで(黒を別色に置き換えるとか)
buffer 1 に別色の●の画像を作るとかはだめですか?



暇人

リンク

2015/11/20(Fri) 22:08:15|NO.73164

簡単な方法としては
読み込んだ画像を、白背景に黒透過でコピーして、そこに色減算合成コピーを重ねて
黒抜き画像を作って、それを白背景に色減算コピーして白抜き画像にする
画像の横2倍でウィンドウバッファを用意
左側を縁の色で塗りつぶす(この時boxfを使うと1ドット余分になるので注意)
右側を黒で塗りつぶす
左側に元画像を黒透過でコピー
白抜き画像をgmode7のアルファブレンド成分用として右側に黒透過でコピー
この時に縦横にずらしてコピーしとけば
左側の画像の周囲を縁として利用できる
元画像サイズでgmode7のコピーをすれば縁取り済み画像の完成


黒(各色0)以外を縁取りするモジュール

#module //[ edgepic size, type ] // size : 縁のサイズ // mode : 縁を作るモード「0=一番外側の縁の角を描画しない、1=一番外側の縁の角も描画する」 #deffunc edgepic int size,int mode sel=ginfo_sel rgb=(ginfo_r<<16) | (ginfo_g<<8) | ginfo_b w=ginfo_winx h=ginfo_winy buffer 100,w,h,0 //画像の形に黒抜きする作業用バッファ gmode 2 gcopy sel,0,0,w,h //白背景に黒透過コピー gmode 6,0,0,256 gcopy sel,0,0,w,h //色減算コピーして上でコピーした画像を黒くする(黒抜き画像が出来る) buffer 101,w*2,h,0 //gmode7用のバッファ color:boxf w,0,w+w,h //左半分は白のまま右側を黒で塗りつぶす gmode 6,0,0,256 pos 0,0 gcopy 100,0,0,w,h //白背景側に黒抜き画像を色減算コピー(白抜き画像が出来る) gmode 2 //白抜き画像を右側の黒背景に縁マスク用にずらしながら黒透過コピー rimloop=size*2+1 repeat rimloop cnty=cnt repeat rimloop if ( ((cnt=0) or (cnt=(rimloop-1))) and ((cnty=0) or (cnty=(rimloop-1))) )=0 or mode!0 { pos w-size+cnt,-size+cnty gcopy 101,0,0,w,h } loop loop //白抜き画像だった場所を縁色で塗りつぶす gradf 0,0,w,h,1,rgb,rgb pos 0,0 gcopy sel,0,0,w,h //縁色で塗りつぶされた場所に読み込んだ画像を黒透過コピー gsel sel //最初の操作先に戻す color :boxf //黒で塗りつぶしてから gmode 7,w,h pos 0,0 gcopy 101,0,0,w,h //gmode7でコピー(縁取り画像完成) return #global buffer 1 picload dir_exe+"\\hsptv\\hsptv_img.png",2 color 0,255,0 //縁色指定 edgepic 1,0 sx=ginfo_sx sy=ginfo_sy gsel 0 gradf 0,0,640,480,1,$884422,$224488 gmode 2,sx,sy pos 0,0 gcopy 1



さーす

リンク

2015/11/21(Sat) 03:14:27|NO.73167

御三方ともありがとうございます!
モジュールまで作っていただけるなんて
おかげで実現できました、ありがとうございました!



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