Image processing I';我正在尝试在ASM中垂直翻转图像
我尝试使用以下代码垂直翻转图像:Image processing I';我正在尝试在ASM中垂直翻转图像,image-processing,assembly,arm,Image Processing,Assembly,Arm,我尝试使用以下代码垂直翻转图像: flipV: ldr r0, =pic2 ldr r7, =#0x06800000 ;vram ldr r1, =#0x18000 ;point do last byte ldr r6, =#0x18000 ;counter mov r5,#0 loop: ldr r4,[r0,r5] str r4,[r7,r1] add r5,r5,#1 sub r1, r1,#1 subs r6, r6,#1 bne loop bx lr 他获取最后一
flipV:
ldr r0, =pic2
ldr r7, =#0x06800000 ;vram
ldr r1, =#0x18000 ;point do last byte
ldr r6, =#0x18000 ;counter
mov r5,#0
loop:
ldr r4,[r0,r5]
str r4,[r7,r1]
add r5,r5,#1
sub r1, r1,#1
subs r6, r6,#1
bne loop
bx lr
他获取最后一个字节并与first交换,最后一个-1与first+1交换,依此类推
我得到了翻转图像,但它被扭曲了。前
您的代码一次加载并存储4个字节。假设一个像素实际上是4字节,请尝试:
flipV:
ldr r0, =pic2
ldr r7, =#0x06800000 ;vram
ldr r1, =#0x17ffc ;point to last pixel
ldr r6, =#0x18000 ;counter
mov r5, #0
loop:
ldr r4, [r0, r5]
str r4, [r7, r1]
add r5, r5, #4
sub r1, r1, #4
subs r6, r6, #4
bne loop
bx lr
此外,这不是垂直翻转,而是图像的180度旋转。根据输出文件的外观,我将假设图像每像素存储1字节,RGB平面单独存储 一次加载和存储4个字节,当您反转图像中32位字的顺序时,您没有反转字中字节的顺序,这会导致失真,失真发生在4像素宽的频带中 这意味着像素按以下顺序开始:
ABCD EFGH IJKL MNOP
MNOP IJKL EFGH ABCD
PONM LKJI HGFE DCBA
但最终的顺序是:
ABCD EFGH IJKL MNOP
MNOP IJKL EFGH ABCD
PONM LKJI HGFE DCBA
但您希望它们按以下顺序排列:
ABCD EFGH IJKL MNOP
MNOP IJKL EFGH ABCD
PONM LKJI HGFE DCBA
在存储以下内容之前,请尝试使用rev
操作码反转字节顺序:
ldr r4, [r0, r5]
rev r4, r4
str r4, [r7, r1]
您还需要根据Scott的回答每次递增/递减4