Thanks for reply, Anders! I found Xlib Visual structure that contains color masks. Actually masks was normal RGB: R=0xFF0000, G=0xFF00 and B=0xFF.
Swapping R and B masks gave me necessary result. By some strange resons X RGB image converts to PIL BRG image, in Image.fromstring I think, and BRG accordingly to RGB =) Anyway now all screenshot will have the right color masks. 2010/11/5, Anders Sandvig <anders.sand...@gmail.com>: > On Fri, Nov 5, 2010 at 7:16 AM, loz.accs <loz.a...@gmail.com> wrote: >> [...] >> >> Image object (Image.fromstring) was created successfully, but red and >> blue colors was swapped. >> So my question: is there any way to swap colors in image using PIL? > > My naive (and slow) implementation would be something like this (code not > tested): > > def swap(image): > width, height = image.size() > res = Image.new("RGBA", (width, height)) > data1 = image.load() > data2 = res.load() > for y in range(height): > for x in range(width): > r, g, b, a = data1[x, y] > data2[x, y] = (b, g, r, a) > del image > return res > > However, be aware that even if the format is BGRx on your machine doesn't > mean it's the same on a different machine (or even on your machine with a > different resolution), as the screen format will depend on the graphics card > and > driver. > > Usually the drivers will have a way to tell which format the screen is in > (i.e. > RGBx or BGRx), so I advice you to check the format and pass this information > on > to the Python code, or convert it to RGBx before handing the image buffer > over > to Python. > > > Anders > _______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig