Как обрезать полигон (заполнить поли-изображением) из QImage (Qt 4.6) - PullRequest
0 голосов
/ 23 декабря 2010

OS :: win xp sp3

Qt :: 4.6

Я работаю над игрой PUZZLE на основе Qt и мне нужна помощь.

В проекте естьвключена основная картинка, которую нужно разобрать на более мелкие части (полигоны с изображениями принадлежат им).Поэтому я создаю изображение QImage image = QImage("someImage.jpg") и хочу работать с чем-то вроде обрезки изображения на этом объекте.

Я проверил QImage, QPixmap ... document на сайте nokia в поисках func члена.похож на обрезку, но найден ноль.

Нужна ссылка на класс, который я должен использовать (#include <???>), чтобы решить эту проблему, а затем я перепроверю онлайн-документ.

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

Предполагается, что исходное изображение называется A. У вас есть многоугольник P. Вы хотите создать уменьшенное изображение B, которое по сути является "обрезанным" P. Это шаги:

  • СоздатьB. Чтобы узнать размер, просто используйте QPolygonF :: boundingRect для P.
  • Заполните B прозрачным цветом или любым другим цветом фона, который вы хотите иметь.
  • Создает новый QPainter, который работает на B
  • Устанавливает путь клипа художника в P (многоугольник может быть преобразован в путь), см. QPainter :: setClipPath
  • Рисует А, используя художник

Обратите внимание, что вы можетепереведите художника, если ограничительный прямоугольник P не находится в начале координат.

0 голосов
/ 26 декабря 2010

Вы должны использовать QPixMap: с его помощью вы можете скопировать все или часть исходного изображения в ваши части головоломки. Раскрашивая эти части прозрачным цветом, вы можете сделать внешнюю часть ваших полигонов невидимой. Или вы используете bitBlt (Qt 3 Support Member) с QImage для того же эффекта.

0 голосов
/ 23 декабря 2010

Вы можете использовать этих членов QImage

QImage  copy ( const QRect & rectangle = QRect() ) const
QImage  copy ( int x, int y, int width, int height ) const
...