新しく発言する  EXIT  インデックスへ
!更新、COLOR色指標チェッカー5

  !更新、COLOR 色指標チェッカー5 SECOND 2008/01/07 22:16:38  (修正2回)
  似たようなものですが、以前作りました。 荒田浩二 2008/01/09 02:02:14 
   └!面白いプログラムで、イジッテミマシタ、勝... SECOND 2008/01/09 08:33:37  (修正5回)
    └"B"が上位桁のようです。 荒田浩二 2008/01/10 09:32:45  (修正1回)
     └おこられないかと、ひやひやしていましたの... SECOND 2008/01/10 22:51:58 
      └白石先生、お願いします。 SECOND 2008/01/11 06:05:14 
       └メモリ上でRGB順になります。 山中和義 2008/01/11 07:58:11 
        └ありがとうございました、直します。 SECOND 2008/01/11 08:52:51  (修正1回)

  !更新、COLOR 色指標チェッカー5 SECOND 2008/01/07 22:16:38  (修正2回)  ツリーへ

!更新、COLOR 色指標チェッカー5  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/07 22:16:38 ** この記事は2回修正されてます
!更新、COLOR 色指標チェッカー6
!---------------------
SET TEXT BACKGROUND "OPAQUE" ! 文字の背景色設定=(色指標が0の色)で塗る。

SET WINDOW -1,20, 26,-1
CALL plot_color
!STOP ! 色指標 表の描画のみの場合。

!----
PLOT TEXT ,AT 0,1:"カーソルを、表示色に乗せる。"
PLOT TEXT ,AT 0,2:"マウス 右ボタンで、終了。"
MOUSE POLL mx,my,mlb,mrb !マウスの状態取得。
ASK PIXEL VALUE (mx,my) cb
!----
DO WHILE mrb<>1
MOUSE POLL mx,my,mlb,mrb !マウスの状態取得。
ASK PIXEL VALUE (mx,my) c
IF -1<c AND c<>cb THEN
SET AREA COLOR c
LET y=9.6
LET r=3
DO WHILE y<25
DRAW disk WITH SCALE(3,r)*SHIFT( 4.5,y)
LET y=y+r+0.3
LET r=r*EXP(0.06*(8-y))
LET y=y+r
LOOP
ASK COLOR MIX(c) r,g,b
PLOT TEXT ,AT 0.5,4, USING "r=%.### g=%.### b=%.###":r,g,b
PLOT TEXT ,AT 0.5,5 ,USING "色指標=###":c
PLOT TEXT ,AT 4.5,5:"  #"&right$("0"&BSTR$(r*255,16),2)&right$("0"&BSTR$(g*255,16),2)&right$("0"&BSTR$(b*255,16),2)
PLOT TEXT ,AT 0.5,6:"mode""Native"""
PLOT TEXT ,AT 4.5,6:"bgr="&right$("0"&BSTR$(b*255,16),2)&right$("0"&BSTR$(g*255,16),2)&right$("0"&BSTR$(r*255,16),2)
LET cb=c
END IF
WAIT DELAY 0.1 !クロックアップを押える
LOOP
!----
SET AREA COLOR 0
PLOT AREA:0,0; 8,0; 8,2;0,2
PLOT TEXT ,AT 5,2:"終了。"

!----
SUB plot_color
FOR i=0 TO 25
FOR j=0 TO 9
LET c=i*10+j
WHEN EXCEPTION IN
SET AREA COLOR c
USE
SET AREA COLOR 0
END WHEN
PLOT AREA:j+10,i; j+11,i; j+11,i+1; j+10,i+1
NEXT j
!--- scale
PLOT TEXT ,AT -1.5+10,i+1 ,USING "###":i*10
IF i<10 THEN PLOT TEXT ,AT i+10.4,0 :STR$(i)
!---
NEXT i
END SUB

END

  似たようなものですが、以前作りました。 荒田浩二 2008/01/09 02:02:14   ツリーへ

Re: !更新、COLOR 色指標チェッカー5  返事を書く  ノートメニュー
荒田浩二 <knrztrhoel> 2008/01/09 02:02:14
似たようなものですが、以前作りました。

情報を表示させたい色をクリック。再クリックで消去。右クリックで終了。

左は COLOR MODE が "REGULAR" の色指標とR,G,Bの強度。
中央は COLOR MODE が "NATIVE" の時の色指標と色強度を255倍した整数。
右は、それを16進,2進表現したものです。

REM ** 色情報 **
DECLARE EXTERNAL PICTURE rect
DECLARE FUNCTION regular_to_native
DIM cm(3),cn$(3),c8bit(3)
MAT READ cn$
DATA "R","G","B"
LET xp=8
LET yp=32
SET BITMAP SIZE 120*xp+1,20*yp+1 ! 961,641
SET WINDOW 0,xp,yp,0
SET TEXT HEIGHT 0.56
SET TEXT JUSTIFY "CENTER","HALF"
DRAW color_index
LET s=-1
DO
DO
MOUSE POLL x,y,left,right
LOOP UNTIL left=0 AND right=0
DO
MOUSE POLL x,y,left,right
LOOP UNTIL left=1 OR right=1
IF right=1 THEN STOP ! 右クリックで終了
LET col=INT(y)*xp+INT(x)
IF col<>s THEN
DRAW rect(col) WITH SCALE(2/3,8)*SHIFT(xp/2-7/3,yp/2-4)
DRAW rect(col) WITH SCALE(2/3,8)*SHIFT(xp/2-1/3,yp/2-4)
DRAW rect(col) WITH SCALE(2/3,8)*SHIFT(xp/2+5/3,yp/2-4)
PLOT TEXT ,AT xp/2-2,yp/2-4+0.5 : STR$(col)
ASK COLOR MIX(col) cm(1),cm(2),cm(3) ! R,G,B
FOR i=1 TO 3
PLOT TEXT ,AT xp/2-2,yp/2+i+0.5 ,USING " # <.####": cn$(i),STR$(ROUND(cm(i),4))
LET c8bit(i)=ROUND((2^8-1)*cm(i),0)
PLOT TEXT ,AT xp/2,yp/2+i+0.5 ,USING "# >##": cn$(i),STR$(c8bit(i))
LET c24bit=c24bit+2^(8*(i-1))*c8bit(i)
PLOT TEXT ,AT xp/2+2,yp/2+i+0.5 ,USING ">#######": BSTR$(c8bit(i),2)
NEXT i
PLOT TEXT ,AT xp/2,yp/2-4+0.5 : STR$(c24bit) ! regular_to_native(col)
PLOT TEXT ,AT xp/2+2,yp/2-4+0.5 : BSTR$(c24bit,16)
LET c24bit=0
LET s=col
ELSE ! 同じ色の再クリックで消去
DRAW color_index
LET s=-1
END IF
LOOP
PICTURE color_index
FOR j=0 TO yp-1
FOR i=0 TO xp-1
LET c=j*xp+i
DRAW rect(c) WITH SHIFT(i,j)
PLOT TEXT ,AT i+0.5,j+0.5 : STR$(c)
NEXT i
NEXT j
END PICTURE
FUNCTION regular_to_native(c)
ASK COLOR MIX(c) fr,fg,fb
LET regular_to_native=ROUND((2^8-1)*fr)+2^8*ROUND((2^8-1)*fg)+2^16*ROUND((2^8-1)*fb)
END FUNCTION
END
EXTERNAL PICTURE rect(c) ! 長方形の塗りつぶし
SET AREA COLOR c
PLOT AREA : 0,0;1,0;1,1;0,1
END PICTURE

   └!面白いプログラムで、イジッテミマシタ、勝... SECOND 2008/01/09 08:33:37  (修正5回)  ツリーへ

Re: 似たようなものですが、以前作りました。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/09 08:33:37 ** この記事は5回修正されてます
!面白いプログラムで、イジッテミマシタ、勝手な事してすみません。

!情報を表示させたい色をクリック。再クリックで消去。右クリックで終了。

!左は COLOR MODE が "REGULAR" の色指標とR,G,Bの強度。
!中央は COLOR MODE が "NATIVE" の時の色指標と色強度を255倍した整数。
!右は、それを16進,2進表現したものです。

REM ** 色情報 **
DECLARE EXTERNAL PICTURE rect
DIM cm(3),cn$(3),c8bit(3)
MAT READ cn$
DATA "R","G","B"
LET xp=8
LET yp=32
!SET BITMAP SIZE 120*xp+1,20*yp+1 ! 961,641
SET WINDOW 0,xp,yp,0
SET TEXT HEIGHT 0.56
SET TEXT JUSTIFY "CENTER","HALF"
DRAW color_index
!STOP ! 表のみの場合。
LET s=-1
DO
DO
MOUSE POLL x,y,left,right
LOOP UNTIL left=0 AND right=0
DO
MOUSE POLL x,y,left,right
WAIT DELAY 0.05 ! クロックアップを、押える。
LOOP UNTIL left=1 OR right=1
IF right=1 THEN STOP ! 右クリックで終了
LET ix=INT(x)
LET iy=INT(y)
LET col=iy*xp+ix
IF col<>s THEN
IF 5<ix THEN LET ix=ix-2
IF 26<iy THEN LET iy=iy-5
DRAW rect(col) WITH SCALE(3,6)*SHIFT(ix,iy)
SET TEXT BACKGROUND "OPAQUE" ! 文字の背景色設定=(色指標が0の色)で塗る。
PLOT TEXT ,AT INT(x)+0.47,INT(y)+0.5 : " "&STR$(col)
ASK COLOR MIX(col) cm(1),cm(2),cm(3) ! R,G,B
LET c24bit=0
FOR i=1 TO 3
PLOT TEXT ,AT ix+0.5,iy+i+1.5 ,USING " # <.####": cn$(i),STR$(ROUND(cm(i),4))
LET c8bit(i)=ROUND(255*cm(i),0)
PLOT TEXT ,AT ix+1.5,iy+i+1.5 ,USING " # >##": cn$(i),STR$(c8bit(i))
! LET c24bit=c24bit*256+c8bit(i) ! RGB順の表示。
LET c24bit=c24bit/256+c8bit(i)*BVAL("10000",16) ! BGR順の表示。
PLOT TEXT ,AT ix+2.5,iy+i+1.5 ,USING ">#######": BSTR$(c8bit(i),2)
NEXT i
PLOT TEXT ,AT ix+1.5,iy+i-2.5 : " "&STR$(c24bit)
PLOT TEXT ,AT ix+2.5,iy+i-2.5 : " "&right$("00000"&BSTR$(c24bit,16),6)
LET s=col
ELSE ! 同じ色の再クリックで消去
DRAW color_index
LET s=-1
END IF
LOOP

PICTURE color_index
SET TEXT BACKGROUND "TRANSPARENT" ! 文字の背景色設定=(透明)
FOR j=0 TO yp-1
FOR i=0 TO xp-1
LET c=j*xp+i
DRAW rect(c) WITH SHIFT(i,j)
PLOT TEXT ,AT i+0.5,j+0.5 : STR$(c)
NEXT i
NEXT j
END PICTURE

END

EXTERNAL PICTURE rect(c) ! 長方形の塗りつぶし
SET AREA COLOR c
PLOT AREA : 0,0;1,0;1,1;0,1
END PICTURE

    └"B"が上位桁のようです。 荒田浩二 2008/01/10 09:32:45  (修正1回)  ツリーへ

Re: !面白いプログラムで、イジッテミマシタ、勝...  返事を書く  ノートメニュー
荒田浩二 <knrztrhoel> 2008/01/10 09:32:45 ** この記事は1回修正されてます
"B"が上位桁のようです。
十進BASICのヘルプの、[グラフィックス][独自の拡張 (color mode)]に説明があります。
個人的には、やはり上位からRGBのほうがすっきりするのですが。

私は自作の投稿プログラムを変更・上書きされるのは大歓迎です。
たいがい変更されたプログラムのほうが面白いですし、勉強になります。
あれは、ゲームを作るときにどの色を使うか選びたかったので作ったものです。
SECONDさんのプログラムでは複数の色を比較できるのがいいですよね。
色は周囲の色によって受ける印象が違ってしまいますから。

REM ** 色情報2 **
SET TEXT HEIGHT 0.025
LET x1=0.2
LET x2=0.5
DO
INPUT PROMPT " REGULARの色指標を入力(0〜255). 範囲外で終了" : rcol
IF rcol<0 OR rcol>255 OR rcol<>INT(rcol) THEN STOP
CLEAR
SET COLOR MODE "REGULAR"
SET AREA COLOR rcol
PLOT AREA : 0.2,0.2;0.8,0.2;0.8,0.6;0.2,0.6
ASK COLOR MIX(rcol) rR,rG,rB
PLOT TEXT ,AT x1,0.90 : "[REGULAR]"
PLOT TEXT ,AT x1,0.85 : "No."&STR$(rcol)
PLOT TEXT ,AT x1,0.80 ,USING "R = <.####" :STR$(ROUND(rR,4))
PLOT TEXT ,AT x1,0.75 ,USING "G = <.####" :STR$(ROUND(rG,4))
PLOT TEXT ,AT x1,0.70 ,USING "B = <.####" :STR$(ROUND(rB,4))
!
SET COLOR MODE "NATIVE"
ASK PIXEL VALUE(0.5,0.5) ncol ! 色の読み取り
ASK COLOR MIX(ncol) nR,nG,nB
LET nR=ROUND(255*nR,0)
LET nG=ROUND(255*nG,0)
LET nB=ROUND(255*nB,0)
PLOT TEXT ,AT x2,0.90 : "[NATIVE]"
PLOT TEXT ,AT x2,0.85 : "No."&STR$(ncol)&" = "&BSTR$(ncol,16)
PLOT TEXT ,AT x2,0.80 ,USING "R = >## = >#" :STR$(nR),BSTR$(nR,16)
PLOT TEXT ,AT x2,0.75 ,USING "G = >## = >#" :STR$(nG),BSTR$(nG,16)
PLOT TEXT ,AT x2,0.70 ,USING "B = >## = >#" :STR$(nB),BSTR$(nB,16)
LET nBGR=2^16*nB+2^8*nG+nR ! Bを上位桁
IF nBGR=ncol THEN
LET nBGR24bit$=RIGHT$("000000"&BSTR$(nBGR,16),6)
PLOT TEXT ,AT x2,0.65 : "BGR = "&nBGR24bit$
ELSE
BEEP
PLOT TEXT ,AT x2,0.65 : "Not equal !! "&STR$(nBGR)
STOP
END IF
LOOP
END

     └おこられないかと、ひやひやしていましたの... SECOND 2008/01/10 22:51:58   ツリーへ

Re: "B"が上位桁のようです。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/10 22:51:58
おこられないかと、ひやひやしていましたので、安心しました。
ありがとうございます。

ヘルプファイルの説明は、知りませんでした。
時々、ホームベージなどを書く時の色指定に、#00ffff などと、
書いたりしますので、私は、RGB の順番にしてしまいました。
今、困り果てています。

      └白石先生、お願いします。 SECOND 2008/01/11 06:05:14   ツリーへ

Re: おこられないかと、ひやひやしていましたの...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/11 06:05:14
白石先生、お願いします。

0000 B8 00524742           mov eax,'R'*10000h+'G'*100h+'B'
0005 B8 00524742           mov eax,'RGB'

000A 00524742            dd 'R'*10000h+'G'*100h+'B'
000E 00524742            dd 'RGB'
0012 42 47 52 00           db 'BGR',0


上の、オペランドは、全て同じメモリーイメージで、'B','G','R',0 (アドレス昇順)
となりますが、RGB を、string と見なすか、dword と見なすかの違いだと思います。

この事を、考慮しても、Windowsは、BGR の順なのでしょうか。


ヘルプの、[グラフィックス][独自の拡張 (color mode)]

<参考>色を16進数で指定したいときは,BVAL関数を用いる。
 たとえば,青は,BVAL("FF0000",16)。

<注意>色を指定する整数のバイト構成が,HTMLと逆。
 HTMLでは上位バイトからRGBの順に指定するが,Windowsでは下位バイトからRGBの順。

       └メモリ上でRGB順になります。 山中和義 2008/01/11 07:58:11   ツリーへ

Re: 白石先生、お願いします。  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/11 07:58:11
メモリ上でRGB順になります。

x86の場合、リトルエンディアン方式ですから、Windowsの仕様というよりCPU仕様になると思います。

ビデオカードのメモリ(デバイスドライバ)では、1,4,8,16,24,32bit色を考慮する必要があります。


エンディアン (endian)
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3

        └ありがとうございました、直します。 SECOND 2008/01/11 08:52:51  (修正1回)  ツリーへ

Re: メモリ上でRGB順になります。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/11 08:52:51 ** この記事は1回修正されてます
ありがとうございました、直します。

以下の説明がありましたが、「4バイトのデータ」は、

「4バイトで1つの数値データ」または、「ダブル・ワード」
としないと、誤解が生ずると思います。
やはり、古さを感じて、なじめません。x86系の方が、新しい考え方、
数の成長に、頭を押えないデータ配置のように、思います。


エンディアン
出典: フリー百科事典『ウィキペディア(Wikipedia)』

例えば16進数で 0x1234ABCD という4バイトのデータを、
データの上位バイトからメモリに「12 34 AB CD」と並べる方式を
ビッグエンディアン (big endian)、
データの下位バイトから「CD AB 34 12」と並べる方式を
リトルエンディアン (little endian) という。


 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。