m.cEnc_ico = 0h00F47C55041AD3119A730000F81EF32E
m.ii=88
m.hBmp = 0
If 0 == GdipCreateBitmapFromHICON(m.oIml.ListImages(m.ii).ExtractIcon().Handle, @m.hBmp)
m.cFile = Textmerge(SYS(5)+CURDIR()+"ico\Folder_open.ico") &&c:\提取的圖示<<m.ii>>.ico')
If 0 == GdipSaveImageToFile(m.hBmp, Strconv(m.cFile+Chr(0),5),m.cEnc_ico,0)
*MESSAGEBOX(Textmerge('已保存圖示 <<m.ii>> 到 <<m.cFile>>'))
Else
*MESSAGEBOX(Textmerge('!!! 保存圖示 <<m.ii>> 失敗。'))
Endif
GdipDisposeImage(m.hBmp)
Else
*? '---- !!! 創建位圖物件失敗.'
Endif
GdiplusShutdown(m.hTk)
*-* 到這一步可以提取出一個假的ICO檔案,然后借用你的轉換陳述句,卻不成功,請教原因
cTempFileName= m.cFile
*在前面加一個常數定義:
** LoadImage defines ****
#define IMAGE_BMP 0
#define IMAGE_ICON 1
#define LR_LOADFROMFILE 0x0010
*然后找到,修改:
MESSAGEBOX(cTempFileName)
m.hImage = WinAPI_LoadImage( 0, cTempFileName, iif(lower(justext(cTempFileName))=='ico',IMAGE_ICON,IMAGE_BMP), 0, 0, LR_LOADFROMFILE) && Don't load from resource file
declare long GdiplusStartup in gdiplus long @, string, long @
declare long GdiplusShutdown in gdiplus long
declare long GdipCreateBitmapFromFile in gdiplus string, long @
declare long GdipCreateHICONFromBitmap in gdiplus long, long @
declare long GdipDisposeImage in gdiplus long
store 0 to oImage, hImage
m.hToken = 0
m.iInputBuf = 0h01 + REPLICATE( CHR(0),15 )
GdiplusStartup(@ hToken, iInputBuf, 0)
GdipCreateBitmapFromFile(STRCONV(cTempFileName+CHR(0), 5), @ oImage)
GdipCreateHICONFromBitmap(oImage, @ hImage)
GdipDisposeImage(oImage)
GdiplusShutdown(m.hToken)
uj5u.com熱心網友回復:
這代碼邏輯也太亂了吧,真沒看懂你想實作什么功能uj5u.com熱心網友回復:
就是從IMAGELIST控制元件中取出圖示并保存為圖示檔案。uj5u.com熱心網友回復:
代碼是拼湊的,其中下面那部份還是借用了你的代碼。uj5u.com熱心網友回復:
你這代碼能不報錯運行?第一段就是用來提取圖示檔案的,啥叫“提取出一個假的ICO檔案”?只要正確宣告了 gdiplus 函式,提取出來就是真實的圖示檔案,可執行的代碼應該是這樣:
Declare long GdiplusStartup in GDIPlus long @, string, long @
Declare long GdiplusShutdown in GDIPlus long
Declare Long GdipCreateBitmapFromHICON in GDIPlus Long, Long @
Declare Long GdipSaveImageToFile In GDIPlus Long, String, String, Long
Declare long GdipDisposeImage in GDIPlus long
*---- 這個自己改 ----
m.oIml = Thisform.olecontrol1
m.ii = 2
*---------------------
m.hToken = 0
m.iInputBuf = Chr(1) + Replicate(Chr(0),15)
GdiplusStartup(@ hToken, iInputBuf, 0)
m.cEnc_ico = 0h00F47C55041AD3119A730000F81EF32E
m.hBmp = 0
If 0 == GdipCreateBitmapFromHICON(m.oIml.ListImages(m.ii).ExtractIcon().Handle, @m.hBmp)
m.cFile = "ttt.ico"
If 0 == GdipSaveImageToFile(m.hBmp, Strconv(m.cFile+Chr(0),5),m.cEnc_ico,0)
? 'ok, ' + FullPath(m.cFile)
Else
? 'error'
Endif
GdipDisposeImage(m.hBmp)
Else
? 'error'
Endif
GdiplusShutdown(m.hToken)
uj5u.com熱心網友回復:
這幾天有點忙,抱歉今天才上來, 謝謝老師的回復,回頭我測驗一下。uj5u.com熱心網友回復:
新的問題來了,再次請教老師,我從IMAGELIST中取出的圖示不是原圖不清晰,如果做到取出原圖?
uj5u.com熱心網友回復:
這個沒辦法,ImageList 在加入圖片時已經處理過了,存盤的圖片就是經過縮放的,無法還原uj5u.com熱心網友回復:
mark啊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103724.html
標籤:VFP
