Based on this answer https://stackoverflow.com/a/769221/544721 , I've made following code printing values in grabbed region:
import sys
from PyQt4.QtGui import QPixmap, QApplication
app = QApplication(sys.argv)
# img is QImage type
img = QPixmap.grabWindow(
QApplication.desktop().winId(),
x=00,
y=100,
height=20,
width=20,
).toImage()
for x in range(0,20):
for y in range(0,20):
print( "({},{}) = {}".format( x,y,(img.pixel(x,y)) ) )
But pixels are displayed like this:
(0,0) = 4285163107
(0,1) = 4285163107
(0,2) = 4285163107
(0,3) = 4285163107
(0,4) = 4285163107
(0,5) = 4285163107
How to get RGB values of QImage
(obtained from QPixmap
) pixels ? (preferably, solution working in 16,24,32 screen bit depths) ?
Example output:
(0,0) = (0,0,0)
...
(10,15) = (127,15,256)
(Solution for Linux, written in Python3)
QImage is designed and optimized for I/O, and for direct pixel access and manipulation, while QPixmap is designed and optimized for showing images on screen.
The issue you are seeing is that the number being returned from img.pixel() is actually a QRgb value that is a format independent value. You can then convert it into the proper representation as such:
import sys
from PyQt4.QtGui import QPixmap, QApplication, QColor
app = QApplication(sys.argv)
# img is QImage type
img = QPixmap.grabWindow(
QApplication.desktop().winId(),
x=00,
y=100,
height=20,
width=20,
).toImage()
for x in range(0,20):
for y in range(0,20):
c = img.pixel(x,y)
colors = QColor(c).getRgbF()
print "(%s,%s) = %s" % (x, y, colors)
(0,0) = (0.60784313725490191, 0.6588235294117647, 0.70980392156862748, 1.0)
(0,1) = (0.60784313725490191, 0.6588235294117647, 0.70980392156862748, 1.0)
(0,2) = (0.61176470588235299, 0.6588235294117647, 0.71372549019607845, 1.0)
(0,3) = (0.61176470588235299, 0.66274509803921566, 0.71372549019607845, 1.0)
QImage docs:
The color of a pixel can be retrieved by passing its coordinates to the pixel() function. The pixel() function returns the color as a QRgb value indepedent of the image's format.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With