I am creating an image editor where I perform pixel manipulations to a QImage object, and use a QPixmap (displayed through a QLabel) to represent the changes made to the QImage. The reason why I am using two separate objects for the image is that the QLabel is resizable (to offer the user a better view), and hence, the QPixmap may not be the exact representation of the image. For a better explanation of the relationship between the objects, see the following diagram:

Document 1.jpg

Therefore, this is what is happening in my program:

  1. The user performs mouse movements over the QLabel, in order to edit the image.
  2. The x, y coordinates of the mouse events are used to determine the particular pixel of the QPixmap (the resized image).
  3. The pixel's x, y values and the resize factor of the QPixmap are used to determine the target pixel of the QImage.
  4. The target pixel is modified.
  5. A new QPixmap is created from the modified QImage, which is then used to replace the old one.



As you can probably guess, this design is pretty slow. It won't be a big issue for smaller images, but for larger images I need to speed things up. How do I do it? How do programs like Photoshop achieve this?