Russian Qt Forum

Qt => Вопросы новичков => Тема начата: teatralaik от Апрель 19, 2017, 18:54



Название: вращение QImage без копирования
Отправлено: teatralaik от Апрель 19, 2017, 18:54
Добрый день!
Есть необходимость аллоцировать QImage из готового буфера.
Код:
int main(int argc, char *argv[])
{

    int width = 3;
    int height = 3;
    size_t t = width*height*4;

    circular_buffer<uint8_t> rxRingBuffer(t);
    uint8_t* pBuf = &(rxRingBuffer.front());

    QImage img((uchar*)pBuf, width, height, QImage::Format_ARGB32);

    img.setPixel(0,0, 100);

    for(int i = 0; i < t; i++){
        cout<<(int)rxRingBuffer[i]<<endl;
    }
    return 0;
}

И если setPixel отрабатывает нормально, то есть в rxRingBuffer лежит первым элементом 100. То теперь появилась необходимость вращать полученную QImage.
Код:
    QTransform rotating;
    rotating.rotate(45);
    img = img.transformed(rotating);
    memcpy(pBuf, img.bits(), t);
то помимо создания нового временного QImage необходимо копирование в исходный pBuf. Можно ли как-то обойти?


Название: Re: вращение QImage без копирования
Отправлено: Apktyc от Апрель 19, 2017, 20:31
Код:
    QTransform rotating;
    rotating.rotate(45);
    img = img.transformed(rotating);
    memcpy(pBuf, img.bits(), t);

В коде может быть ошибка, размер повернутого изображения не всегда равен размеру исходного. Собственно именно поэтому и появляется необходимость во временном объекте.