ppm 图像的 BGR 到 RGB 的 Mips 转换

问题描述

我正在处理一项任务,但一直坚持从 BGR(蓝色、绿色、红色)到 RGB(红色、绿色、蓝色)的转换我一直在尝试反转代码的位置,请注意未使用十六进制代码的前 2 位,其他六对分别对应于 RGB 或 BGR。这是我一直在构建的代码

.data
FILENAME: .asciiz "C:/Users/conta/Desktop/mario.ppm"
ERROROPEN: .asciiz "Erro ao abrir o arquivo."
STR: .space 512

.text
    
    li $t7,4       #Número de quebras de linhas no arquivo ppm
    li $t8,0x0a        # \n
    li $t9,0       #contador

    la $a0,FILENAME    #Nome do arquivo a ser aberto.
    li $a1,0       #Sempre zero.
    li $a2,0       #0 para leitura 1 para escrita.
    li $v0,13      #syscall 13 (open file).
    syscall
    
    bltz $v0,end_error #menor que zero significa que nao encontrou o arquivo.

    move $a0,$v0       #v0 possui o descritor de arquivo.
    la $a1,STR     #endereco para armazernar os caracteres lidos.
    li $a2,1       #ler apenas 1 byte.
    
readloopcabecalho:

    beq $t9,4,preparacao 

    li $v0,14      #syscall 14
    syscall
    
    lb $t4,0($a1)
    beq $t4,$t8,cont
    addi $a1,$a1,4        #incrementa para o proximo endereco de $a1.
    
    bnez $v0,readloopcabecalho #enquanto v0 for diferente de 0 continua.
    
preparacao:

    la $a1,0x10040000  
    j readlooppixel
    
readlooppixel:  
    
    beq $t5,3,zera_pula
    li $v0,14          #syscall 14
    syscall
    addi $a1,1        #incrementa para o proximo endereco de $a1.
    j cont2
            
zera_pula:

    
    move  $t5,$zero
    addi $a1,1
    j readlooppixel 
                
                                    
cont2:
    
    addi $t5,$t5,1
    bnez $v0,readlooppixel     #enquanto v0 for diferente de 0 continua.
    j preparacao2

cont:
    
    addi $t9,$t9,1
    j readloopcabecalho
    
preparacao2:

    la $a1,0x10040000  
    j arrumandopixel
    
arrumandopixel:

    lw  $t3,0($a1)
    sw $t3,0($a1)
    addi $a1,4            #incrementa para o proximo endereco de $a1.
    bne $a1,0x10080000,arrumandopixel

    j printcabecalho
    
printcabecalho:

    la $a0,STR     #puxando STR para $a0 para aplicar o syscall
    
    li $v0,4       #syscall para printar o cabeçalho
    syscall         #porem está printando somente o primeiro caractere que foi gravado no endereço
    
    j end
    
end_error:
 
    la $a0,ERROROPEN
    li $v0,4
    syscall

end:

    li $v0,10
    syscall

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)