git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44260 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #----------------------------------------------------------------------
 | |
| # Name:        wxPython.lib.imageutils
 | |
| # Purpose:     A collection of functions for simple image manipulations
 | |
| #
 | |
| # Author:      Robb Shecter
 | |
| #
 | |
| # Created:     7-Nov-2002
 | |
| # RCS-ID:      $Id$
 | |
| # Copyright:   (c) 2002 by
 | |
| # Licence:     wxWindows license
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| import wx
 | |
| 
 | |
| def grayOut(anImage):
 | |
|     """
 | |
|     Convert the given image (in place) to a grayed-out
 | |
|     version, appropriate for a 'disabled' appearance.
 | |
|     """
 | |
|     factor = 0.7        # 0 < f < 1.  Higher is grayer.
 | |
|     if anImage.HasMask():
 | |
|         maskColor = (anImage.GetMaskRed(), anImage.GetMaskGreen(), anImage.GetMaskBlue())
 | |
|     else:
 | |
|         maskColor = None
 | |
|     data = map(ord, list(anImage.GetData()))
 | |
| 
 | |
|     for i in range(0, len(data), 3):
 | |
|         pixel = (data[i], data[i+1], data[i+2])
 | |
|         pixel = makeGray(pixel, factor, maskColor)
 | |
|         for x in range(3):
 | |
|             data[i+x] = pixel[x]
 | |
|     anImage.SetData(''.join(map(chr, data)))
 | |
| 
 | |
| 
 | |
| def makeGray((r,g,b), factor, maskColor):
 | |
|     """
 | |
|     Make a pixel grayed-out. If the pixel
 | |
|     matches the maskColor, it won't be
 | |
|     changed.
 | |
|     """
 | |
|     if (r,g,b) != maskColor:
 | |
|         return map(lambda x: int((230 - x) * factor) + x, (r,g,b))
 | |
|     else:
 | |
|         return (r,g,b)
 | |
| 
 | |
| 
 | |
| 
 | |
| def stepColour(c, step):
 | |
|     """
 | |
|     stepColour is a utility function that simply darkens or lightens a
 | |
|     color, based on the specified step value.  A step of 0 is
 | |
|     completely black and a step of 200 is totally white, and 100
 | |
|     results in the same color as was passed in.
 | |
|     """
 | |
|     def _blendColour(fg, bg, dstep):
 | |
|         result = bg + (dstep * (fg - bg))
 | |
|         if result < 0:
 | |
|             result = 0
 | |
|         if result > 255:
 | |
|             result = 255
 | |
|         return result
 | |
| 
 | |
|     if step == 100:
 | |
|         return c
 | |
|         
 | |
|     r = c.Red()
 | |
|     g = c.Green()
 | |
|     b = c.Blue()
 | |
|     
 | |
|     # step is 0..200 where 0 is completely black
 | |
|     # and 200 is completely white and 100 is the same
 | |
|     # convert that to a range of -1.0 .. 1.0
 | |
|     step = min(step, 200)
 | |
|     step = max(step, 0)
 | |
|     dstep = (step - 100.0)/100.0
 | |
|     
 | |
|     if step > 100:
 | |
|         # blend with white
 | |
|         bg = 255.0
 | |
|         dstep = 1.0 - dstep  # 0 = transparent fg; 1 = opaque fg
 | |
|     else:
 | |
|         # blend with black
 | |
|         bg = 0.0
 | |
|         dstep = 1.0 + dstep;  # 0 = transparent fg; 1 = opaque fg
 | |
|     
 | |
|     r = _blendColour(r, bg, dstep)
 | |
|     g = _blendColour(g, bg, dstep)
 | |
|     b = _blendColour(b, bg, dstep)
 | |
|     
 | |
|     return wx.Colour(int(r), int(g), int(b))
 | |
| 
 |