我寫了一些代碼,應該使一個新的形象。我的背景圖像有黑色區域,當for循環出現黑色像素時,它應該在新圖像中繪製藍色區域,否則應該繪製原始像素。以爲我可以這樣做,但程序不斷運行。Qt繪製一個藍色的像素,如果原始像素是在一個新的圖像黑色
QApplication a(argc, argv);
int c, m, y, k, al;
QColor color;
QColor drawColor;
QImage background;
QImage world(1500, 768, QImage::Format_RGB32);
QSize sizeImage;
int height, width;
background.load("Background.jpg");
world.fill(1);
QPainter painter(&background);
sizeImage = background.size();
width = sizeImage.width();
height = sizeImage.height();
for(int i = 0; i < height; i++)
{
for(int z = 0; z < width; z++)
{
color = QColor::fromRgb (background.pixel(i,z));
color.getCmyk(&c,&m,&y,&k,&al);
if(c == 0 && m == 0 && y == 0 && k == 0) //then we have black as color and then we draw the color blue
{
drawColor.setBlue(255);
painter.setPen(drawColor);
painter.drawPoint(i,z);
}
}
}
//adding new image to the graphicsScene
QGraphicsPixmapItem item(QPixmap::fromImage(background));
QGraphicsScene* scene = new QGraphicsScene;
scene->addItem(&item);
QGraphicsView view(scene);
view.show();
是我的循環錯誤還是我的畫家?它是QImage :: pixel:座標(292,981)超出範圍,但對於很多像素來說,它的速度還不夠快。
你是什麼意思的「程序繼續運行」?它永遠不會出現for循環?你沒有得到你期望的結果? – Bart 2012-02-16 13:06:16
僅僅是因爲循環速度非常慢?在我看來,通過讀取和寫入像這樣的單個像素來轉換大圖像會稍微滯後! – Robinson 2012-02-16 13:14:41
那麼什麼是更好的方法?我想也許只是重新繪製藍色像素,但我不知道如何在圖像上循環。 – user1007522 2012-02-16 13:27:40