私は1つのピクセルの色を取得しようとしています(私はEmu8086で13hグラフィックモードを使用しています)、そのためには割り込み10hの関数0Dhを使用しています。しかし、それは全く一貫していません。それはピクセルの正しい色を与えることができず、私に00(黒)を与えます。INT 10h関数0Dh inconsistent
私はCXがモード13hで倍増していることを知っています。しかし、私はその問題が私が描いた形(2つの塗り潰した長方形)であることが非常に疑わしいです。
どのような問題があるようですか?また、どのようにして1つのピクセルの色を一貫して得ることができますか?
.MODEL SMALL
.DATA
X DW ?
Y DW ?
T DW ?
linecounter dw ?
LastX DW ?
LastY DW ?
PixelClr DB ?
.CODE
.STARTUP
MOV AH, 00
MOV AL, 13h
INT 10h
MOV X, 85
MOV Y, 93
MOV linecounter, 75
Square4Top:
MOV BH, 0
MOV CX, X
MOV DX, Y
MOV T, 7
MOV AH, 0Ch
MOV AL, 01h
DrawSquare4Top:
INT 10h
INC CX
INC DX
DEC T
CMP T, 0
JNZ DrawSquare4Top
INC X
DEC Y
DEC linecounter
CMP linecounter, 0
JNZ Square4Top
MOV X, 61
MOV Y, 93
MOV linecounter, 50
Square5Top1:
MOV BH, 0
MOV CX, X
MOV DX, Y
MOV T, 7
MOV AH, 0Ch
MOV AL, 0Bh
DrawSquare5Top1:
INT 10h
INC CX
INC DX
DEC T
CMP T, 0
JNZ DrawSquare5Top1
INC X
DEC Y
DEC linecounter
CMP linecounter, 0
JNZ Square5Top1
;;;
;;; INITIALIZE MOUSE
;;;
MOV AX, 0
INT 33h
MOV AX, 1
INT 33h
MOV AX, 2
INT 33h
MouseAgain:
MOV AX, 3
INT 33h
CMP BX, 1
JNZ MouseAgain
MOV AH, 0Dh
MOV BH, 00
SHR CX, 1
INT 10h
MOV PixelClr, AL
JMP MouseAgain
END
色がゼロではない場合( 'test al、al' 'jz MouseAgain'' mov ah、4Ch'' int 21h')、アプリが最終的に終了した後に(tasm + dosbox、私はemu8086を所有していません)(私は 'hide cursor call'を削除しました。dosbox VGAは320x200モードでは驚くほど素敵な" hw "矢印を持っています。 。ところで、あなたのスクリーンショットは塗りつぶされた形を示していますが、DOSBoxでは「チェッカー」の塗りつぶしで表示されます。つまり、次のピクセルはすべて黒ですので、カラーピクセルをクリックするのはさらに難しくなります。 – Ped7g
簡単な方法:ピクセルを読み取った後、読み取った色にもう一度設定します。画像は変わるべきではありません。その場合、値のスケーリング、マウスピクセル<->のスクリーンピクセルなどの値のスケーリングの理由がわかります – Tommylee2k