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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразовать изображение  (Прочитано 4311 раз)
lamazavr
Гость
« : Март 23, 2011, 23:16 »

Пытаюсь преобразовать изображение (необходимо сделать поворот так, чтобы картинка "стояла")..
делаю примерно так
Код:
for(int nY=0; nY < width; ++nY){
       for(int nX=0; nX < height; ++nX){
           color = image.pixel(nX,nY);
           image2.setPixel(nX+1,nY+1,color);
       }
}

qt говорит index out of range в image2?
как создать пустое (прозрачное) изображение с известным размером?

зы на алгоритм не пинайте.. пока об этом не думал.. все данные наугад
Записан
alexman
Гость
« Ответ #1 : Март 24, 2011, 00:09 »

Можно во время рендеринга поворачивать!
Записан
lamazavr
Гость
« Ответ #2 : Март 24, 2011, 00:26 »

там поворот вокруг оси! а нужно так чтобы поворот произошол вокруг оси Z

как создать пустое (прозрачное) изображение с известным размером?!!
Записан
merke
Гость
« Ответ #3 : Март 24, 2011, 12:30 »

На чем изображение то отображается?

Почему бы не применить функция QImage

Код:
QImage transformed ( const QMatrix & matrix, Qt::TransformationMode mode = Qt::FastTransformation ) const

Не парься, уверен в Qt уже есть готовое решение... Поищи просто в справке
Записан
ufna
Гость
« Ответ #4 : Март 24, 2011, 14:53 »

обычно проблемы вызывает поворот вокруг Ох или Оу, но вокруг Z оси то в кутэ элементарно rotate() делается пеинтером

Александр указал универсальный способ. Еще сетТрансформ() по моему есть
Записан
lamazavr
Гость
« Ответ #5 : Март 27, 2011, 11:06 »

сделал по своему)
Код:
    float offset = 0;
    for(int dx=0; dx < width; ++dx){
        for (int dy=0;dy<height;dy++) {
            QRgb color = image.pixel(dx,dy);
            image2.setPixel(dx,dy+offset/2,color);
        }
        offset += 0.5;
    }
Записан
ufna
Гость
« Ответ #6 : Март 28, 2011, 13:41 »

Это медленнее только в фиг знает сколько раз )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Март 28, 2011, 14:31 »

сделал по своему)
Код:
    float offset = 0;
    for(int dx=0; dx < width; ++dx){
        for (int dy=0;dy<height;dy++) {
            QRgb color = image.pixel(dx,dy);
            image2.setPixel(dx,dy+offset/2,color);
        }
        offset += 0.5;
    }
Ну так конечно можно, но это "сдвиг по столбцам" а совсем не поворот. Как уже сказали, painter поворот на плоскости делает. А если хочется самому, то школьные формулы

x_new = x * cos(a) - y * sin(a)
y_new = y * cos(a) + x * sin(a)

где "а" - угол поворота против часовой стрелки. Комбинация осей может быть любая
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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