Мой код вращает изображение BMP правильно, но только если число пикселей кратно 4 ... Кто-нибудь может увидеть, что не так? - PullRequest
0 голосов
/ 08 декабря 2011

Работает только тогда, когда ширина и высота кратны четырем. Чего не хватает? 2x2 ... 4x4 .... 16x16 ... 400x400 ... все работает, но не если это просто случайная картинка .bmp.

 void rotate90(Image& image)
    {
        Pixel * tempPixel = new Pixel[(image.infoHeader.biWidth * image.infoHeader.biHeight)];
        int tempWidth = image.infoHeader.biWidth;
        image.infoHeader.biWidth = image.infoHeader.biHeight;
        image.infoHeader.biHeight = tempWidth;
        for(int r = 0; r < image.infoHeader.biHeight; r ++)
        {
            for(int c = 0; c < image.infoHeader.biWidth; c++)
            {

                int f = c+(r*image.infoHeader.biWidth);
                int t = (image.infoHeader.biHeight-r-1) + (image.infoHeader.biWidth*c);
                tempPixel[f]=image.pixels[t];
            }
        }

        delete[] image.pixels;
        image.pixels=tempPixel;
    }

1 Ответ

1 голос
/ 08 декабря 2011

Внутренний цикл for, вероятно, должен быть

int f = c+(r*image.infoHeader.biHeight);
int t = (image.infoHeader.biWidth-r-1) + (image.infoHeader.biHeight*c);
tempPixel[f]=image.pixels[t];

Чтобы рассчитать индекс для плоского массива пикселя в [x,y], вам нужно использовать i=y+Y*x или i=x+X*y, если Yи X - ширина и высота соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...