Nicolas EISEN wrote: > 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 ...
I think you're making this a lot harder than it needs to be. import win32ui import win32gui import win32con import win32api ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON) ico_y = win32api.GetSystemMetrics(win32con.SM_CYICON) large, small = win32gui.ExtractIconEx("c:/windows/system32/shell32.dll",0) win32gui.DestroyIcon(large[0]) hdc = win32ui.CreateDCFromHandle( win32gui.GetDC(0) ) hbmp = win32ui.CreateBitmap() hbmp.CreateCompatibleBitmap( hdc, ico_x, ico_x ) hdc = hdc.CreateCompatibleDC() hdc.SelectObject( hbmp ) hdc.DrawIcon( (0,0), small[0] ) hbmp.SaveBitmapFile( hdc, "save.bmp" ) -- Tim Roberts, t...@probo.com Providenza & Boekelheide, Inc. _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32