Russian Qt Forum
Март 29, 2024, 18:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вращение QImage без копирования  (Прочитано 1802 раз)
teatralaik
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« : Апрель 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. Можно ли как-то обойти?
Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 130


Просмотр профиля
« Ответ #1 : Апрель 19, 2017, 20:31 »

Код:
    QTransform rotating;
    rotating.rotate(45);
    img = img.transformed(rotating);
    memcpy(pBuf, img.bits(), t);

В коде может быть ошибка, размер повернутого изображения не всегда равен размеру исходного. Собственно именно поэтому и появляется необходимость во временном объекте.
« Последнее редактирование: Апрель 19, 2017, 20:34 от Apktyc » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.