Handmade Hero»Forums»Code
Jordan Duval
21 posts
Mirroring Bitmap about the Y axis
Hi all,

I am trying to see if I can mirror a bitmap about the Y axis before I blt the bitmap, and I gave a shot at writing the code but I am getting an exeption thrown on line 15. I figured if I just swapped each pixel with the pixel equally as far on the other side of the center of the bitmap it would do the trick.

Say we have a 5 pixel bitmap:

p1 p2 p3 p4 p5

and after my method it should look like:

p5 p4 p3 p2 p1

Am I thinking about this wrong? Also are there any faster ways to do this?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
    uint32 Temp;
    uint8* Row = (uint8 *) Bitmap->Pixels;
    
    for(int Y = 0;
        Y < Bitmap->Height;
        ++Y)
    {
        uint32* Pixel = (uint32 *) Row;

        for(int X = 0;
            X < (Bitmap->Width / 2);
            ++X)
        {
            Temp = *(Pixel + X);
            *(Pixel + X) = *(Pixel + Bitmap->Width - X);
            *(Pixel + Bitmap->Width - X) = Temp;
        }
        
        Row += Pitch;
    }
Lachlan Easton
14 posts
Technically a Programmer
Mirroring Bitmap about the Y axis
Edited by Lachlan Easton on
1
Pixel + Bitmap->Width - X

Assuming Width is the number of pixels in a row then this will go one off the end.
e.g. Say a row has 5 pixels. Pixel(0) + Width(5) - X(0) = 5, but highest index of 5 pixels is 4.

Also you can probably get rid of the Pixel var as it's just an alias for Row.
39 posts / 1 project
Mirroring Bitmap about the Y axis
Edited by graeme on
RJTracer
Also you can probably get rid of the Pixel var as it's just an alias for Row.

Then the pointer arithmetic would be working on the wrong size type

w/r/t faster methods I think if you were to reuse the flipped bitmap you wouldn't do any better without going into micro-optimisation territory, but for a one shot, or to save memory if you expect to flipping a lot of them, you could add a flipped render path and just read out the X values backwards when doing the actual blit
Jordan Duval
21 posts
Mirroring Bitmap about the Y axis
graeme
add a flipped render path and just read out the X values backwards when doing the actual blit


This is a lot better, thanks!