画像色調

 投稿者:しばっち  投稿日:2020年 5月24日(日)14時28分11秒
  R,G,Bをスライドバーで指定して色調を変更します。
リアルタイム処理はできないのでウェイトを入れています。
スライドバーを動かした後、グラフィックウィンドゥ内をマウスでクリックしてください。


OPTION BASE 0
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(XSIZE-1,YSIZE-1),MM(XSIZE-1,YSIZE-1)
ASK PIXEL ARRAY(0,0) M
LOCATE VALUE NOWAIT(1),RANGE 0 TO 255,AT 240:R0 !'セピア調
LOCATE VALUE NOWAIT(2),RANGE 0 TO 255,AT 200:G0
LOCATE VALUE NOWAIT(3),RANGE 0 TO 255,AT 145:B0
DO
   CLEAR
   SET TEXT HEIGHT YSIZE/10
   SET COLOR COLORINDEX(0,0,0)
   SET TEXT BACKGROUND "OPAQUE"
   SET TEXT JUSTIFY "CENTER" , "TOP"
   PLOT TEXT ,AT XSIZE/2,YSIZE/2 :"処理中"
   LET R0=INT(R0)
   LET G0=INT(G0)
   LET B0=INT(B0)
   FOR Y=0 TO YSIZE-1
      SET TEXT JUSTIFY "LEFT" , "TOP"
      PLOT TEXT ,AT 0,0 :USING$("###.#",Y/(YSIZE-1)*100)&"%"
      FOR X=0 TO XSIZE-1
         IF GetKeyState(32)<0 OR GetKeyState(13)<0 OR GetKeyState(27)<0 THEN STOP
         LET C=M(X,Y)
         CALL RGB(C,R,G,B)
         !' LET V=(R+G+B)/3
         LET V=R * 0.298912 + G * 0.586611 + B * 0.114478
         LET RR=R0*V/255
         LET GG=G0*V/255
         LET BB=B0*V/255
         LET MM(X,Y)=SETRGB(INT(RR),INT(GG),INT(BB))
      NEXT X
   NEXT Y
   MAT PLOT CELLS , IN 0,0; XSIZE-1,YSIZE-1:MM
   DO  !'ウェイト。マウスでウィンドゥ内をクリックする。
      IF GetKeyState(32)<0 OR GetKeyState(13)<0 OR GetKeyState(27)<0 THEN STOP
      MOUSE POLL X,Y,LL,RR
      LOCATE VALUE NOWAIT(1):R0
      LOCATE VALUE NOWAIT(2):G0
      LOCATE VALUE NOWAIT(3):B0
   LOOP WHILE LL=0 AND RR=0
LOOP
END

EXTERNAL FUNCTION SETRGB(R,G,B)
LET R=MIN(255,MAX(R,0))
LET G=MAX(0,MIN(G,255))
LET B=MAX(0,MIN(B,255))
LET SETRGB=B*65536+G*256+R
END FUNCTION

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

戻る