Отображение файла изображения, сохраненного в буфере MASM 5.1 - PullRequest
1 голос
/ 15 января 2012

Я хочу отобразить изображение в графическом режиме. Я прочитал изображение в буфер. Я сделал этот код, но как я могу отобразить пиксели на экране? Этот код работает для отображения текстового файла, но как я могу отобразить пиксели?

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

Нужна помощь для школы, но учитель все равно нам не помогает :(

1 Ответ

2 голосов
/ 15 января 2012

Установить графический режим с помощью Функция прерывания BIOS 10h 0 .

Я рекомендую установить Режим 13h (320x200x8bpp) , потому что это самое простое в программировании и должно работатьна любой VGA-карте или лучше.

Затем нарисуйте изображение в видеобуфере, пиксель за пикселем.Буфер начинается с физического адреса 0xA0000 и имеет длину 320 * 200 = 64000 байт.

Если вам не нужно поддерживать больше, чем "16 стандартных" цветов (те, которые вы получаете по умолчанию в текстовых режимах) или вы в порядке с черно-белым, вы можете избежать перепрограммирования палитры VGA в ЦАП VGA и избежать выбора лучшего цвета.Просто преобразуйте триплеты RGB в яркость (, сложите вместе 30% от значения красного, 59% от значения зеленого и 11% от значения синего ), масштабируйте значение до диапазона от 0 до 15 включительно., добавьте 16 к этому, и это значение байта, которое вы должны записать в видеобуфер.

...