Mais petit problème : il affiche en zone noire la partie transparente.
On m'a dit qu'il y avait des possibilités avec GDI+ mais n'étant pas un expert de ce type de code, j'en appelle à vous...
Lien intéressant : http://marknelson.us/2002/07/01/renderi ... -revisited
Code : Tout sélectionner
; Pour quitter, clic droit
Procedure LoadPictureFile(image,szFile.s)
;
; Loads
; BMP, GIF, JPG, WMF, EMF, ICO
;
hFile = CreateFile_(szFile, #GENERIC_READ, 0, #Null, #OPEN_EXISTING, 0, #Null)
If hFile
dwFileSize = GetFileSize_(hFile, #Null)
HGLOBAL = GlobalAlloc_(#GMEM_MOVEABLE, dwFileSize)
If HGLOBAL
pvData = GlobalLock_(HGLOBAL)
bRead = ReadFile_(hFile, pvData, dwFileSize, @dwBytesRead, #Null)
GlobalUnlock_(HGLOBAL)
If bRead
If CreateStreamOnHGlobal_(HGLOBAL, #True, @pstm.IStream) = #S_OK
If OleLoadPicture_(pstm, dwFileSize, #False,?IID_IPicture, @Bild.IPicture) = #S_OK
; Here we got the IPicture Object
Bild\get_Height(@Height)
Bild\get_Width(@Width)
hDC = GetDC_(GetDesktopWindow_())
ScreenPixels_X = GetDeviceCaps_(hDC,#LOGPIXELSX)
ScreenPixels_Y = GetDeviceCaps_(hDC,#LOGPIXELSY)
ReleaseDC_(GetDesktopWindow_(),hDC)
PicHeight = (Height * ScreenPixels_X) / 2540
PicWidth = (Width * ScreenPixels_Y) / 2540
result = CreateImage(image,PicWidth,PicHeight)
If result
hDC = StartDrawing(ImageOutput(image))
Bild\Render(hDC,0,PicHeight,PicWidth,-PicHeight,0,0,Width,Height,0)
StopDrawing()
EndIf
Bild\Release()
EndIf
pstm\Release()
EndIf
EndIf
EndIf
CloseHandle_(hFile)
EndIf
ProcedureReturn Image
DataSection
IID_IPicture:
Data.l $7BF80980
Data.w $BF32,$101A
Data.b $8B,$BB,$00,$AA,$00,$30,$0C,$AB
EndDataSection
EndProcedure
Image = LoadPictureFile(1,"C:\Perso\PureBasic\CodeArchiv\Graphics\Gfx\anim_surprize.gif")
If Image
OpenWindow(1,0,0,ImageWidth(Image),ImageHeight(Image),"ImageV!ew",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(1))
ImageGadget(1,0,0,ImageWidth(Image),ImageHeight(Image),ImageID(Image))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : End
Case #WM_RBUTTONUP : End
Case #WM_LBUTTONDOWN : SendMessage_(WindowID(1),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndSelect
ForEver
EndIf