LINUX.ORG.RU

Доступ к пикселям QImage

 ,


0

2

Вот пример кода

QRgb pb;
for(int x=0; x<img->width();x++){
    for(int y=0; y<img->height(); y++){
        pb = img->pixel(x,y);
        img->setPixel(x,y,qRgb(qRed(pb)-10,qGreen(pb)-10,qBlue(pb)-10));
    }
}

И это жутко неудобно, да и вообще непонятно, есть какой то лучший способ как читать, так и устанавливать определенные пиксели? П.С. приоритет на скорость.


QImage srcImage = QImage(100, 100);
QImage destImage = QImage(200, 200);
QPoint destPos = QPoint(25, 25);

srcImage.fill(Qt::red);
destImage.fill(Qt::white);

QPainter painter(&destImage);
painter.drawImage(destPos, srcImage);
painter.end();
stevejobs ★★★★☆
()
Ответ на: комментарий от knotri

Если тебе надо быстро работать над пикселями изображения, например, производить всякую арифметику поканально, QImage, QRgb и прочую ОО-мишуру надо выкинуть и работать просто над буфером (желательно выровненным).

yoghurt ★★★★★
()

Там есть scanLine и возможность читать пиксели построчно. Но если в приоритете скорость, то можно попробовать использовать opencv.

quiet_readonly ★★★★
()

Ээ, так определённые, или все? В твоём примере ты как бы перебираешь все. Рисуй в пиксмап, а потом QPainter куда тебе надо. Это навскидку.

false ★★★★★
()
Ответ на: комментарий от false

Мне нужно с каждым пикселем сделать какое то действие. В Pixmap нет доступа к пикселям (где то читал такое)

knotri
() автор топика

English, motherfucker, do you speak it?

  // QImage::Format_RGB32:
  // QImage::Format_ARGB32:
  // QImage::Format_ARGB32_Premultiplied:

  // do smth within area [left;right) x [top; bottom)

  quint8 const* line = img.constScanLine(r_top) + r_left *4;
  int stride =  img.bytesPerLine();

  quint32 red = 0, green = 0, blue = 0; 
  for ( int y = top; y < bottom; ++y, line += stride ) {
    quint8 const* pix = line;
    for ( int x = left; x < right; ++x, pix += 4 ) {
      blue   = pix[0];
      green = pix[1];
      red     = pix[2];
    }
  }
nikitos ★★★
()
Последнее исправление: nikitos (всего исправлений: 2)
Ответ на: комментарий от nikitos

Хорошо, отлично, а как записать? Или изменив эти значения я изменю и значение реальной картинки?

knotri
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.