!更新、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) という。 |