我是Python的新手,我仍然不知道究竟是什么样的像素返回(看起来像是一个rgb或rgba的模型 - 缺少类型声明并没有帮助) 我想抓住每个像素并改变它。
newqim = QImage(imWidth, imHeight, QImage.Format_ARGB32)
for xstep in range(0, imWidth - 1):
for ystep in range(0, imHeight - 1):
pixelValueTuple = im.getpixel((xstep, ystep))
pixelR = pixelValueTuple[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
copiedValue = qRgb(pixelR, pixelG, pixelB)
newqim.setPixel(xstep, ystep, copiedValue)
上面是提供的代码,我想我会迭代那个newqim,但是我无法理解我将如何在Python中做到这一点。
for xstep in range(0, imWidth-1):
for ystep in range(0, imHeight -1):
答案 0 :(得分:0)
我不确定我理解你想要什么,但是因为你是Python的新手,所以这里有一些提示......
此代码:
pixelR = pixelR[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
与:
相同pixelR, pixelG, pixelB = pixelValueTuple[:3]
如果你确定len(pixelValueTuple) == 3
,那就是:
pixelR, pixelG, pixelB = pixelValueTuple
有点挑剔,但python家伙往往对语法有点天真。请阅读PEP-8。从现在起,我根据它命名变量(camelCase
例如变量只会伤害我的眼睛% - )。
您可能需要range(width)
而不是range(0, width-1)
。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(0, 10 - 1)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
width, height = 300, 300
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
r, g, b, a = QColor(im.pixel(x ,y)).getRgb()
# ... do something to r, g, b, a ...
im.setPixel(x, y, QColor(r, g, b, a).rgb())
width, height = 100, 100
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
im.setPixel(x, y, QColor(255, x * 2.56, y * 2.56, 255).rgb())
im.save('sample.png')
结果: