Displaying an array as an image

Fredrik Lundh fredrik at pythonware.com
Sat Nov 20 06:03:37 EST 1999


David Fenyes <dfenyes at flash.net> wrote:
> Is there an easy way to display a 2D array as an image using just
> Tkinter?  I'm aware of a TK Image canvas widget, but can't find docs
> on how to use it or what an 'image' is supposed to consist of.  I'm
> just evaluating numerical python as a platform and this is a pretty
> important functionality that is not really addressed in any of the
> readily available docs.

see the attached message.  and remember that
python.org's search facility is your friend.

> PIL and friends seem to be more oriented to reading/writing image
> formats, and are not really what I'm looking for.

since you obviously don't know what PIL can do for
you, how can you be so sure?

check out:

http://www.pythonware.com/library/pil/handbook/imagetk.htm

and the demo scripts in the source distribution.

</F>

Newsgroups: comp.lang.python
From: "Fredrik Lundh" <fredrik at pythonware.com>
Subject: Re: Tkinter PhotoImage Question
Date: Fri, 12 Nov 1999 16:06:38 +0100

Ivan Van Laningham <ivanlan at callware.com> wrote:
> Ok, I've managed to create an image, using xx=PhotoImage(file), and I
> can retrieve pixel values from that image using xx.get(x,y).
> 
> Now I want to use the put() method to write a pixel.
> 
> How do I do that?  I would have expected that put() would take a string
> of pixel values for the data argument, but that doesn't seem to be the
> case. ...

from the eff-bot archives:

#
# create a greyscale ramp using pure Tkinter
#
# fredrik lundh, january 1998
#
# fredrik at pythonware.com
# http://www.pythonware.com
#

from Tkinter import *

# must initialize interpreter before you can create an image
root = Tk()

data = range(256) # 0..255

im = PhotoImage(width=len(data), height=1)

# tkinter wants a list of pixel lists, where each item is
# a tk colour specification (e.g. "#120432").  map the
# data to a list of strings, and convert the list to the
# appropriate tuple structure

im.put( (tuple(map(lambda v: "#%02x%02x%02x" % (v, v, v), data)),) )

# resize the image to the appropriate height

im = im.zoom(1, 32)

# and display it

w = Label(root, image=im, bd=0)
w.pack()

mainloop()

# after playing with this a little, you'll love
# the Python Imaging Library.





More information about the Python-list mailing list