2012-01-15 15 views
1

グラフィックモードで画像を表示したい。画像をバッファーに読み込んだ。このコードを作成しましたが、どのようにピクセルを画面に表示できますか?このコードはテキストファイルを表示するように機能しますが、どのようにピクセルを表示できますか?バッファMASM 5.1に保存された画像ファイルを表示

readFIL PROC NEAR ; proc que escreve uma ficha 
    mov ah, 3dh ;Open the file 
    mov al, 0 ;Open for reading 
    lea dx, FILENAM;Presume DS points at FILENAM 
    int 21h ; segment. 
    mov FHAND, ax ;Save file handle 
LP: mov ah,3fh ;Read data from the file 
    lea dx, NAMEFLD ;Address of data NAMEFLD 
    mov cx, 12 ;Read one byte 
    mov bx, FHAND ;Get file handle value 
    int 21h 

    cmp ax, cx ;EOF reached? 
    jne EOF 
    mov al, NAMEFLD ;Get character read 
    ;-------- 
    mov cx,0 
    siga: 


    ;---------------------- 

    mov al,NAMEFLD 
    lea si , NAMEFLD 
    MOV AH,09h 
    int 21h 

    ;--------------------- 
    inc dx ;->> move next caracter in buffer 
    add cx, 1 
    cmp cx,12 
    jne siga 

EOF: mov bx, FHAND 
    mov ah, 3eh ;Close file 
    int 21h 

RET 
readFIL ENDP 

とにかく私たちを助けていない:(​​を使用してグラフィックスモードを設定

答えて

2

を学校が、教師のためのヘルプが必要です。

それはプログラムすると、それが動作するはず最も簡単ですので、私はmode 13h (320x200x8bpp)を設定することをお勧めします任意のVGAカード以上で

イメージをビデオバッファーにピクセル単位で描画します。バッファーは物理アドレス0xA0000から始まり、320 * 200 = 64000バイトの長さです。

「16標準」の色(テキストモードではデフォルトで使用する色)以上をサポートする必要がない場合や、白黒でも問題ない場合は、VGAパレットの再プログラミングを避けることができますVGA DACと最高の色を見つけることを避けることができます。 RGBトリプレットを明るさに変換して()、値を0から15までの範囲にスケーリングし、16を加算すると、ビデオバッファに書き込むべきバイト値になります。

+0

ありがとうございますが、私はどのように画像を描画するためにビデオバッファにアクセスできますか?ピクセルをビデオバッファに入れる例を教えてもらえますか?私は本当にそれをWeb上で見つけることはできません。 –

+0

ピクセルのアドレスはすべて「0xA0000 + y * 320 + x」(物理的)です。したがって、そのアドレスのバイトにピクセルカラー値を書きます。あなたはリアルモード(またはv86)でプログラミングしているので、アドレスをセグメントセレクタ値とオフセットのペアとして表現する必要があります。その結果、セグメント部分のために0xA000となり、 y * 320 + x 'となる。セグメントレジスタ(通常は 'ES'や' DS'のうち、あなたのプログラムの中で手近なもの)に '0xA000'をロードしてから、そのレジスタを使ってメモリに書き込む命令を実行しなければなりません。例えば' movバイトptr es:[bx]、al'。 –

関連する問題