>>>>> "Eric" == Eric Emsellem <[EMAIL PROTECTED]> writes:

    Eric> Hi, this is a question I have posted earlier, but
    Eric> unfortunately I didn't get any answer.  if anybody has any
    Eric> hint on how to do this, I would be most graceful!!  Thanks
    Eric> in advance!

I looked at this a bit -- the underlying image extension code handles
image rotations but it is not exposed at the python level.  I spent
some time working on an image class that would handle rotations (in
this test code below I just hardcoded the rotation for testing).  The
missing part is to get the extent and image placement algorithms to do
the layout properly in the presence of rotation (eg handling extent
and corners properly below).  But this should give the enterprising
developer a head start if they want to run with with.  Basically, I
just copied the guts out of the axes.image.AxesImage.make_image code
to experiment with adding a rotation

from matplotlib.image import AxesImage
from pylab import subplot, show, nx


class RotatedImage(AxesImage):
    def make_image(self):
        from matplotlib.colors import normalize, colorConverter
        from matplotlib.numerix import arange, asarray, UInt8, Float32, repeat, 
NewAxis, typecode
        import matplotlib._image as _image

        if self._A is not None:
            if self._imcache is None:
                if typecode(self._A) == UInt8:
                    im = _image.frombyte(self._A, 0)
                    im.is_grayscale = False
                else:
                    x = self.to_rgba(self._A, self._alpha)
                    im = _image.fromarray(x, 0)
                    if len(self._A.shape) == 2:
                        im.is_grayscale = self.cmap.is_gray()
                    else:
                        im.is_grayscale = False
                self._imcache = im
            else:
                im = self._imcache
        else:
            raise RuntimeError('You must first set the image array or the image 
attribute')


        bg = colorConverter.to_rgba(self.axes.get_frame().get_facecolor(), 0)

        if self.origin=='upper':
            im.flipud_in()

        im.set_bg( *bg)

        im.set_interpolation(self._interpd[self._interpolation])



        # image input dimensions
        numrows, numcols = im.get_size()
        im.reset_matrix()

        xmin, xmax, ymin, ymax = self.get_extent()
        dxintv = xmax-xmin
        dyintv = ymax-ymin

        # the viewport scale factor
        sx = dxintv/self.axes.viewLim.width()
        sy = dyintv/self.axes.viewLim.height()

        if im.get_interpolation()!=_image.NEAREST:
            im.apply_translation(-1, -1)

        # the viewport translation
        tx = (xmin-self.axes.viewLim.xmin())/dxintv * numcols


        #if flipy:
        #    ty = -(ymax-self.axes.viewLim.ymax())/dyintv * numrows
        #else:
        #    ty = (ymin-self.axes.viewLim.ymin())/dyintv * numrows
        ty = (ymin-self.axes.viewLim.ymin())/dyintv * numrows

        l, b, widthDisplay, heightDisplay = self.axes.bbox.get_bounds()

        im.apply_translation(tx, ty)
        im.apply_scaling(sx, sy)

        # resize viewport to display
        rx = widthDisplay / numcols
        ry = heightDisplay  / numrows
        im.apply_scaling(rx, ry)
        im.apply_rotation(45.)
        #print tx, ty, sx, sy, rx, ry, widthDisplay, heightDisplay
        im.resize(int(widthDisplay+0.5), int(heightDisplay+0.5),
                  norm=self._filternorm, radius=self._filterrad)

        if self.origin=='upper':
            im.flipud_in()

        return im

ax = subplot(111)

im = RotatedImage(ax, interpolation='nearest')
im.set_data(nx.mlab.rand(10,10))

xmin, xmax, ymin, ymax = im.get_extent()

corners = (xmin, ymin), (xmax, ymax)
ax.update_datalim(corners)
ax.set_xlim((xmin, xmax))
ax.set_ylim((ymin, ymax))

ax.images.append(im)
show()

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to