Tim Roberts a écrit :
EISEN Nicolas wrote:
I'm lucky, I found ...
My Source :
/from win32gui import *
import win32con
from pywintypes import HANDLE
import win32ui
listHicon = ExtractIconEx("c:\OpenOffice.exe",0)
tupleIcon = GetIconInfo (HANDLE ( listHicon[0][0] ) )
bitmapColor = tupel [4]
picture = win32ui.CreateBitmap()
buffer = picture.GetBitmapBits ( bitmapColor )
/
Python return :
/win32ui.error: GetObject failed on bitmap/
for the last line
win32ui have CreateBitmap with 0 argument and GetBitmapBits with 1
arguments
but win32gui have CreateBitmap with 5 arguments and GetBitmapBits have
2 arguments
Yes. Can't you see why? win32gui is just a thin wrapper around the
actual Win32 APIs. win32ui is an attempt to turn those APIs into
something more like Python objects. Objects have access to additional
state, so you don't have to specify as many parameters. When you call
picture.GetBitmapBits( bitmapColor )
That's getting the pixels from the bitmap you just created. The
parameter it takes is the number of bytes is should copy (so you're
passing garbage). Your bitmap doesn't contain anything yet -- you
haven't even set the size -- so naturally the GetBitmapBits call fails.
You need to do EXACTLY what the demo does. Create a bitmap, set its
size, then draw the icon on the bitmap, THEN pull the bits from the
bitmap. The icon doesn't actually contain bitmaps. It contains arrays
of pixels, but you need them to be a bitmap.
On the demo, hicon is use ton create the variable nid and re use it to
display on the screen, but i want get only the bitmap bits.
I'm not sure why you think these two things are different. The way you
get the bitmap bits is to draw the icon on a bitmap.
With demo_menu, I script it :
/from win32gui import */
/import win32con/
/from win32api import GetSystemMetrics/
/ico_x = GetSystemMetrics(win32con.SM_CXSMICON)/
/ico_y = GetSystemMetrics(win32con.SM_CYSMICON)/
/large, small = ExtractIconEx("c:\dxdiag.exe",0)/
/hicon = small[0]/
/print type(hicon)/
/DestroyIcon(large[0])/
/#creating a source memory DC and selecting a icon in it/
/srcDC = CreateCompatibleDC(0)/
/SelectObject(srcDC,hicon);/
/#creating a destination memory DC and selecting a memory bitmap to it/
/hdcBitmap = CreateCompatibleDC(0)/
/hdcScreen = GetDC(0)/
/hbm = CreateCompatibleBitmap(hdcScreen, ico_x, ico_y)/
/SelectObject(hdcBitmap, hbm)/
/# copies source DC to memory DC resulting in a copy of hicon in hbm/
/BitBlt(hdcBitmap,0,0,ico_x,ico_y,srcDC,0,0,win32con.SRCCOPY);/
/bitmap = CreateBitmapFromHandle(hbm)/
/hbm.SaveBitmapFile()/
/DeleteDC(srcDC);/
/DeleteDC(hdcBitmap);
/
I suppose, I have my icon picture on the Bitmap /hbm/ but how I get
file's bits or how I save it ?
There are SaveBitmapFile or GetBitmapBits methods on win32ui (PyCBitmap)
but I test many disposition, I have always type problem between win32gui
and win32ui objects.
I try to use win32gui DC with icon and win32ui DC with bitmap, but
always the type doesn't work : PyHandle (win32gui) is different from
PyBitmap (win32ui).
Please Help ! I 'm tired ...
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32