Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/PIL/ImageQt.py
diff options
context:
space:
mode:
Diffstat (limited to 'PIL/ImageQt.py')
-rw-r--r--PIL/ImageQt.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/PIL/ImageQt.py b/PIL/ImageQt.py
new file mode 100644
index 0000000..2e9f476
--- /dev/null
+++ b/PIL/ImageQt.py
@@ -0,0 +1,84 @@
+#
+# The Python Imaging Library.
+# $Id: ImageQt.py 2741 2006-06-18 16:17:20Z fredrik $
+#
+# a simple Qt image interface.
+#
+# history:
+# 2006-06-03 fl: created
+# 2006-06-04 fl: inherit from QImage instead of wrapping it
+# 2006-06-05 fl: removed toimage helper; move string support to ImageQt
+#
+# Copyright (c) 2006 by Secret Labs AB
+# Copyright (c) 2006 by Fredrik Lundh
+#
+# See the README file for information on usage and redistribution.
+#
+
+import Image
+
+from PyQt4.QtGui import QImage, qRgb
+
+##
+# (Internal) Turns an RGB color into a Qt compatible color integer.
+
+def rgb(r, g, b):
+ # use qRgb to pack the colors, and then turn the resulting long
+ # into a negative integer with the same bitpattern.
+ return (qRgb(r, g, b) & 0xffffff) - 0x1000000
+
+##
+# An PIL image wrapper for Qt. This is a subclass of PyQt4's QImage
+# class.
+#
+# @param im A PIL Image object, or a file name (given either as Python
+# string or a PyQt string object).
+
+class ImageQt(QImage):
+
+ def __init__(self, im):
+
+ data = None
+ colortable = None
+
+ # handle filename, if given instead of image name
+ if hasattr(im, "toUtf8"):
+ # FIXME - is this really the best way to do this?
+ im = unicode(im.toUtf8(), "utf-8")
+ if Image.isStringType(im):
+ im = Image.open(im)
+
+ if im.mode == "1":
+ format = QImage.Format_Mono
+ elif im.mode == "L":
+ format = QImage.Format_Indexed8
+ colortable = []
+ for i in range(256):
+ colortable.append(rgb(i, i, i))
+ elif im.mode == "P":
+ format = QImage.Format_Indexed8
+ colortable = []
+ palette = im.getpalette()
+ for i in range(0, len(palette), 3):
+ colortable.append(rgb(*palette[i:i+3]))
+ elif im.mode == "RGB":
+ data = im.tostring("raw", "BGRX")
+ format = QImage.Format_RGB32
+ elif im.mode == "RGBA":
+ try:
+ data = im.tostring("raw", "BGRA")
+ except SystemError:
+ # workaround for earlier versions
+ r, g, b, a = im.split()
+ im = Image.merge("RGBA", (b, g, r, a))
+ format = QImage.Format_ARGB32
+ else:
+ raise ValueError("unsupported image mode %r" % im.mode)
+
+ # must keep a reference, or Qt will crash!
+ self.__data = data or im.tostring()
+
+ QImage.__init__(self, self.__data, im.size[0], im.size[1], format)
+
+ if colortable:
+ self.setColorTable(colortable)