Oui je crois que la transparence n'est pas gérée automatiquement.
Juste pour le fun, la proc de Stefou fonctionne très bien et permet l'affichage des GIF. Voici un petit viewer qui peut tenir dans une procédure et dans un soft de visualisation...
Code : Tout sélectionner
Procedure LoadPictureFile(image,szFile.s)
;
; Loads
; BMP, GIF, JPG, WMF, EMF, ICO
;
;CallDebugger
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,32)
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
file$=OpenFileRequester("","","",0)
If file$
LoadPictureFile(0,file$)
imgx = ImageWidth(0)
imgy = ImageHeight(0)
If OpenWindow(0,0,0,imgx+20,imgy+20,GetFilePart(file$),#PB_Window_SystemMenu | #PB_Window_MinimizeGadget| #PB_Window_ScreenCentered)
ImageGadget(0,10,10,imgx,imgy,ImageID(0))
EndIf
Repeat
Event = WaitWindowEvent()
GadgetID = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GadgetID
Case 0 : MessageRequester("Image","Dimensions de "+GetFilePart(file$)+Chr(13)+Str(imgx)+" X "+Str(imgy)+" pixels")
DisableGadget(0,1);évite le renouvellement du messagerequester
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
EndIf