Mam za zadanie zrobić dithering obrazu 8bpp. Po przekształceniu ma mieć 1bpp. Jedyne co mi się udaje to czarny obraz wyjściowy.
.data
filen_in: .asciiz "in.bmp"
filen_out: .asciiz "out.bmp"
pic_in: .space 3678
header: .space 55
pic_out: .space 5119
quant_error: .byte
.text
main:
li $v0, 13
la $a0, filen_in
li $a1, 0
li $a2, 0
syscall
move $t7, $v0
move $a0, $t7
li $v0, 14
la $a1, pic_in
la $a2, 3678
syscall
li $v0, 16
move $a0, $t7
syscall
#================================================================================================================
# REJESTRY
# $S0 - ADRES PIC_IN
# $s1 - LICZNIK
# $s2 - WSKAZNIK PIC_OUT
# $t6 - pomocniczy
#================================================================================================================
li $t0, 1
sb $t0, pic_in+28 #zapisywanie ustawien monochromatycznych
#================================================================================================================
addiu $s0, $zero, 58
addiu $t6, $s0, 3678
move $s2, $zero
loop:
move $s1, $zero #licznik
move $t2, $zero #rejestr kolorow
change_color:
lb $t0, pic_in($s0)
bgt $t0, 123, whitepix
add $t2, $t2, 1
whitepix:
sll $t2, $t2, 1
addi $s1, $s1, 1
addi $s0, $s0, 1
beq $s0, $t6, exit
bne $s1, 8, change_color
sb $t2,pic_out($s2)
addiu $s2, $s2, 1
j loop
#==================================================================================
exit:
sb $t2,pic_out($s2)
addiu $s2, $s2, 1
#open file
la $a0, file_out
li $a2, 0
li $a1, 1
li $v0, 13
syscall
move $t7, $v0
#zapis do pliku
move $a0, $t7
li $v0, 15
la $a1, pic_in
li $a2, 57
syscall
move $a0, $t7
li $v0, 15
la $a1, pic_out
li $a2, 1500
syscall
#zamkniecie pliku
li $v0, 16
move $a0, $t7
syscall
li $v0, 4
la $a0, filen_out
syscall