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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1029
forest彩度の調節5解決


forest

リンク

2015/10/29(Thu) 20:03:27|NO.72613

画像の彩度をスライダなどで徐々に変更してグレースケールの画像に変更できるようにしたいです。
下記のサイトで画像をグレースケールにするサンプルがあったのですが、
彩度の調節が出来ないので分かる方がいましたらお教えください。

http://hspnext.com/hspkura/hspkura10.htm#contents06

;***** 画像の白黒グレイスケール (grayscale.hsp) *****

#include "hsp3util.as"
#define global palfade palcolor : palette,ginfo(16),ginfo(17),ginfo(18),1
#module
#deffunc glaycopy int p1,int p2,int p3,int p4,int p5
mref bmscr,67 : ID=bmscr(18)
screen ID,bmscr(1),bmscr(2),1
repeat 256 : palette cnt,cnt,cnt,cnt : loop
palfade
if p4=0 : _p4=bmscr(1) : else : _p4=p4
if p5=0 : _p5=bmscr(2) : else : _p5=p5
gmode 0 : gcopy p1,p2,p3,_p4,_p5
return
#global

;***** sample *****

screen 0,200,100 : pos 0,0
button "picload",*loadpic
button "glay scale",*glayscale

*loadpic
dialog "bmp;jpg",16 : if stat=0 : stop
screen 3 : picload refstr
redraw 1
stop

*glayscale
gsel 3 : mref bmscr,67
screen 4,bmscr(1),bmscr(2)
glaycopy 3
stop



この記事に返信する


toto

リンク

2015/10/30(Fri) 09:50:17|NO.72626

普通はRGBをHSVに変換してSを下げて再びRGBに変換ってやるんでしょうが
今回はartlet2dで簡易的にやってみました。

#include "a2d.hsp" alCreateImageByFile 0,dir_tv+"bg05.jpg" x=alGetWidth() y=alGetHeight() alCreateImage 1,x,y alSelectImage 0 #define TBS_AUTOTICKS $00000001 #define WS_VISIBLE $10000000 #define WS_CHILD $40000000 #define WM_HSCROLL $00000114 #define TBM_GETPOS $00000400 screen 0,x,y winobj "msctls_trackbar32", "", , WS_VISIBLE|WS_CHILD, 300, 25 hTbar = objinfo(stat, 2) oncmd gosub *onscroll, WM_HSCROLL c=0.0 gosub *draw stop *onscroll if lparam = hTbar { sendmsg hTbar, TBM_GETPOS c=double(stat)/100.0 title ""+stat gosub *draw } return *draw cmatrix(MAT_R) = 1.0-0.701*c,0.587*c, 0.114*c, 0.0, 0.0 cmatrix(MAT_G) = 0.299*c,1.0-0.413*c, 0.114*c, 0.0, 0.0 cmatrix(MAT_B) = 0.299*c, 0.587*c, 1.0-0.886*c, 0.0, 0.0 cmatrix(MAT_A) = 0.0, 0.0, 0.0, 1.0, 0.0 alCopyModeColorMatrix cmatrix alCopyImageToImage 0,1 alCopyImageToScreen 1,0 redraw 1 return



zakki

リンク

2015/10/30(Fri) 09:55:47|NO.72627

1ピクセル読んでRGBからHSVに変換してSを減らした色をhsvcolorで設定して1ピクセル書き込むというのを繰り返すのはどうでしょう?

https://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93#RGB.E3.81.8B.E3.82.89HSV.E3.81.B8.E3.81.AE.E5.A4.89.E6.8F.9B



zakki

リンク

2015/10/30(Fri) 09:59:21|NO.72628

時間差でかぶっちゃいました。artlet2d強いですね。



toto

リンク

2015/10/30(Fri) 10:09:49|NO.72629

さっきのだと色変換2回行ってるので処理がおかしかったです。
正しくはこっちです。


#define TBS_AUTOTICKS $00000001 #define WS_VISIBLE $10000000 #define WS_CHILD $40000000 #define WM_HSCROLL $00000114 #define TBM_GETPOS $00000400 #include "a2d.hsp" alCreateImageByFile 0,dir_tv+"bg05.jpg" screen 0,alGetWidth(),alGetHeight() winobj "msctls_trackbar32", "", , WS_VISIBLE|WS_CHILD, 300, 25 hTbar = objinfo(stat, 2) oncmd gosub *onscroll, WM_HSCROLL c=0.0 gosub *draw stop *onscroll if lparam = hTbar { sendmsg hTbar, TBM_GETPOS c=double(stat)/100.0 title ""+stat gosub *draw } return *draw cmatrix(MAT_R) = 1.0-0.701*c,0.587*c, 0.114*c, 0.0, 0.0 cmatrix(MAT_G) = 0.299*c,1.0-0.413*c, 0.114*c, 0.0, 0.0 cmatrix(MAT_B) = 0.299*c, 0.587*c, 1.0-0.886*c, 0.0, 0.0 cmatrix(MAT_A) = 0.0, 0.0, 0.0, 1.0, 0.0 alCopyModeColorMatrix cmatrix alCopyImageToScreen 0,0 redraw 1 return



forest

リンク

2015/10/30(Fri) 21:57:52|NO.72635

立派なサンプルとサイトを紹介してくださってありがとうございます。
おかげさまで解決しました。



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