[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] BUG: JPEG colors saving a pygame.camera surface



Hello Pygame people,
This is my first post on this list, and more might follow since I am
using pygame for ToonLoop, a stop motion software. The new
pygame.camera module works for me and this is very good job. Thanks
for contributing that !

I think I found a bug ! Hopefully it is only my code that is wrong and
this is easy to fix.

When I save a Pygame surface that I obtained using pygame.camera to a
JPEG using pygame.image.save, the colors are messed up. It looks like
the red and blue channels are interchanged. Thus, maybe my surface is
RBG, whereas pygame.image expects RGB. A camera image doesn't contain
any alpha channel usually.

When I display the surface as a pygame sprite the colors are OK.
When I display the surface as an OpenGL texture the colors are OK.
(using tostring(surface, "RGBX", True))
When I save the surface as an other format such as PNG or BMP the colors are OK.
When I use a surface obtained by loading a JPG image, the colors are OK.
The bug only occurs when I save a surface obtained using the
pygame.camera module.
It consistently happened on 3 Linux computers.

I use Pygame compiled from today's SVN with Python 2.5.2 on Ubuntu
GNU/Linux 8.10 using a V4L2 device. (a WinTV card)

A short code snippet to reproduce the bug:
http://rafb.net/p/gccaJG37.html

A JPEG to see how the output looks like :
http://toonloop.com/static/tmp/image_color_test_out.jpg
A correct image in an other format to compare :
http://toonloop.com/static/tmp/image_color_test_out.png

If you want to download the code and the test image I use :
http://toonloop.com/static/tmp/bug_color_jpeg.tar.gz
I also convert the colorbars.jpg files to surface and back to a JPG
file for comparison. It works flawlessly.

-- 
Alexandre Quessy
http://alexandre.quessy.net/