I think you have a very small RAM and you can not make a copy of every pixel in RAM. 8x32x3=RAM 8=up/down, 32=left/right, 3=RGB colors.
So we must make a trade. RAM verses CPU time.
In ROM draw the up arrow. Not in color but in black & white where 1=on, 0=off. binary, below is a simple 8x4 and you need 8x8.
00010000
00111000
01010100
10010010
The code:
You need a byte to say what character. (points to above table in ROM). 0=up, 1=down, 3=left, 4=right, 5="A", 6=B..........
You need three bytes to say what color is the character. 255,127, 64 = Red=full on, Green=50%, Blue=25% (if ROM bit=1 output 255,127,64 if ROM=0 output 0,0,0)
You need one byte to say how much the character is moved up. 0=not moved up, 1=draw character moved up one line. 2=two lines. This number is what line in the ROM table is drawn first.
------------
Sorry my words are not clear. I am saying start with a small ROM table, next code, then to the display. Do not store "pixels" in RAM. Almost no data is in RAM. This should save 768 bytes of RAM.