[Python-au] PIL Image drawing problem

Duane Hennessy duaneh at connexus.net.au
Sat Feb 28 22:51:35 CET 2004


I'm having problems with the ImageDraw moduel in the PIL. I'm building a 
graphics application to do my artwork with custom filters etc etc... To 
track sessions of work I keep a dictionary of images that are currently 
open and load them when they are chosen into a Tk Canvas object. Works 
fine. I can also invert, flip and add other filters fine, no problem. 
When I come to draw into the image from the canvas it then fails to show 
the modified image in the canvas and instead I am presented with a blank 
canvas. If I apply a filter or whatever afterwards the image appears 
again no problem. What is going on with the draw method of ImageDraw? I 
am basically trying to draw a selection rectangle on the user's mouse 
movements and have followed the example to the T. Relevant bits of code 
I am using below.

---- Code Start ----
try:
    import tkMessageBox as msgbox
    import sys
    import types
    import ImageTk
    from  ImageDraw import *
    import PSDraw
    from string import *
    import pywin.debugger as debug
except ImportError, err:
    msgbox.showwarning("Module Import",err)
    sys.exit(2)
except:
    errType,value,traceback = sys.exc_info()
    msgbox.showwarning("Module Import","%s\n%s" % (errType,value))
    sys.exit()

# rather than make a convoluted string to access the dictionary in a 
class I'll make the dictionary
# global for easy access from outside once this module is imported. I 
might aswell make all the functions
# that work with the dictionary global aswell instead of putting them 
into classes.

# dictionary that holds main 'real' image.
SessionImages = {}

CurrentImage = None # Image representation
CurrentName = None # Image name (SessionImages dictionary key) to the 
current image having the focus.
X = 0 # X Coordinates of image on Canvas
Y = 0 # YCoordinates of image on Canvas

def loadImage(filename):
    '''Load a file representation so that it can be picked up and put onto
    the canvas. This incorporates layers etc'''
    global CurrentImage
    global CurrentName
    global X
    global Y
    try:
        imageToLoad = SessionImages[filename]["1"]
##        debug.brk()

        if imageToLoad.has_key("selection"):
            # grabs the main image here
            im = imageToLoad["image"]
            Start,Stop = imageToLoad["selection"] #Start and Stop are 
both tuples of X and Y coords. No issues here.

             # this is where the problem is!!!
            draw = Draw(im)
            box = [Start,Stop]
            draw.rectangle(box,outline = 128)
            del draw
        else:
            im = imageToLoad["image"]
           
        im = im.resize((imageToLoad["W"],imageToLoad["H"]))
        CurrentImage =  ImageTk.PhotoImage(im)
        CurrentName = filename
        X = imageToLoad["X"]
        Y = imageToLoad["Y"]
    except:
                errType,value,traceback = sys.exc_info()
                msgbox.showwarning("loadImage","%s\n%s" % (errType,value))

---- Code End ----

Hope this makes sense, I can clarify if it doesn't.

Ta.

-- 
DUANE HENNESSY
TROPICAL QUEENSLAND, AUSTRALIA.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: duaneh.vcf
Type: text/x-vcard
Size: 220 bytes
Desc: not available
Url : http://starship.python.net/pipermail/python-au/attachments/20040229/9bf8dbbf/duaneh.vcf


More information about the python-au mailing list