Deutsch
Quelltexte/ Codesnippets

Bilddateien Bilder Bmp Cur Dib Emf Gif Ico Jpe Jpeg Jpg Ole Rle Wmf

 
Andreas Miethe (08.08.11)
Oder per OLE !

Hier mal ein Beispiel

Das sieht zwar kompliziert aus, aber ich zeig es trotzdem mal.

Dieses als OLE_LOADIMAGE.INC abspeichern.
'############################################
'Bilder mit OLE laden und anzeigen
'############################################
'Andreas Miethe * Juli 2002
'############################################
'ab Profan 7.X
'############################################
'getestet mit Win98, WinME und WinXP
'soll aber auch schon mit Win95
'funktionieren.
'############################################
'unterstützte Formate :
'BMP,RLE,DIB,JPG,JPE,JPEG,GIF,EMF,WMF,CUR,ICO
'keine animierten Gif's
'############################################
'Definitionen
DEF CreateStreamOnHGlobal(3) ! "OLE32","CreateStreamOnHGlobal"
DEF OleLoadPicture(5) ! "OLEPRO32","OleLoadPicture"
DEF OleInitialize(1) ! "OLE32","OleInitialize"
DEF OleUnInitialize(0) ! "OLE32","OleUninitialize"
DEF GlobalAlloc(2)  ! "KERNEL32","GlobalAlloc"
DEF GlobalLock(1)  ! "KERNEL32","GlobalLock"
DEF GlobalUnlock(1)  ! "KERNEL32","GlobalUnlock"
DEF GlobalFree(1)  ! "KERNEL32","GlobalFree"
DEF CopyMemory(3)  ! "KERNEL32","RtlMoveMemory"
DEF SelectObject(2) ! "gdi32","SelectObject"
DEF GetDeviceCaps(2) ! "gdi32","GetDeviceCaps"
DEF GetDC(1) ! "User32","GetDC"
DEF ReleaseDC(2) ! "User32","ReleaseDC"
DEF FindResource(3) ! "KERNEL32","FindResourceA"
DEF LoadResource(2) ! "KERNEL32","LoadResource"
DEF SizeOfResource(2) ! "KERNEL32","SizeofResource"
'Konstanten
DEF &Picture_Release     8
DEF &Picture_GetHandle  12
DEF &Picture_GetType    20
DEF &Picture_Get_Width  24
DEF &Picture_Get_Height 28
DEF &Picture_Render     32
DEF &Picture_Select     44
'Globale Variablen
DECLARE OLE32&,OLEPRO32&
DECLARE IID_IPicture#
DECLARE PData#
DECLARE HMEM&
'Prozeduren

Proc Ole_Init'Ole-Schnittstelle initialisieren und Variablen fuellen

    OLE32& = UseDll("OLE32")
    OLEPRO32& = UseDll("OLEPRO32")
    OleInitialize(0)
    Dim IID_IPicture#,16
    Long IID_IPicture#,0 = $7BF80980
    Word IID_IPicture#,4 = $BF32
    Word IID_IPicture#,6 = $101A
    Byte IID_IPicture#,8 = $8B
    Byte IID_IPicture#,9 = $BB
    Byte IID_IPicture#,10 = $00
    Byte IID_IPicture#,11 = $AA
    Byte IID_IPicture#,12 = $00
    Byte IID_IPicture#,13 = $30
    Byte IID_IPicture#,14 = $0C
    Byte IID_IPicture#,15 = $AB

EndProc

Proc Ole_Free'Ole-Schnittstelle Speicherbereiche freigeben

    GlobalFree(Hmem&)
    OleUnInitialize()
    FreeDll OLE32&
    FreeDll OLEPRO32&
    DISPOSE IID_IPicture#

EndProc

Proc Ole_LoadImage'Bild mit OLE laden

    Declare MemPointer&,PStream&,PictureObject&,PSize&
    Parameters Picture$
    '------------------------
    Filemode 0
    PSIZE& = Filesize(Picture$)
    Dim PData#,PSIZE&
    Assign #1,Picture$
    OpenRW #1
    BlockRead(#1,PData#,0,PSIZE&)'Daten in Bereichsvariable einlesen
    CloseRW #1
    '------------------------
    GlobalFree(Hmem&)
    HMem& = GlobalAlloc($022,PSize&)'Speicher reservieren
    Mempointer& = GlobalLock(Hmem&)'Pointer auf Speicher
    CopyMemory(MemPointer&,PData#,PSize&)'Bereichsvariable in Speicher schieben
    DISPOSE PData#'Bereichsvariable freigeben
    GlobalUnlock(HMem&)'Speicher zum Gebrauch freigeben
    CreateStreamOnHGlobal(Hmem&,1,addr(PStream&))'Stream-Pointer erstellen
    OleLoadPicture(PStream&,PSIZE&,0,IID_IPicture#,ADDR(PictureObject&))'Pointer fuer Pictureobject
    '------------------------
    Case PictureObject& > 0 : Return PictureObject&
    Case PictureObject& = 0 : Return 0

EndProc

Proc Ole_LoadResImage'Bild aus Modul mit OLE laden

    Declare MemPointer&,PStream&,PictureObject&,PSize&
    Declare Reshandle&,GlobalMem&
    Parameters Modul&,Resname$,Restype$
    GlobalFree(Hmem&)
    '------------------------
    'Resource laden
    Reshandle& = FindResource(Modul&,addr(Resname$),addr(Restype$))
    Globalmem& = LoadResource(Modul&,ResHandle&)
    PSize& = SizeOfResource(Modul&,Reshandle&)
    '------------------------
    HMem& = GlobalAlloc($022,PSize&)'Speicher reservieren
    Mempointer& = GlobalLock(Hmem&)'Pointer auf Speicher
    CopyMemory(MemPointer&,Globalmem&,PSize&)'Bereichsvariable in Speicher schieben
    GlobalUnlock(HMem&)'Speicher zum Gebrauch freigeben
    CreateStreamOnHGlobal(Hmem&,1,addr(PStream&))'Stream-Pointer erstellen
    OleLoadPicture(PStream&,PSIZE&,0,IID_IPicture#,ADDR(PictureObject&))'Pointer fuer Pictureobject
    '------------------------
    Case PictureObject& > 0 : Return PictureObject&
    Case PictureObject& = 0 : Return 0

EndProc

Proc Ole_RenderImage'Bild auf DC rendern

    Parameters DC&,wnd&,PictureObject&,xx&,yy&,ww&,hh&,Center&
    Declare Command&,Aspect!,xpixels&,ypixels&,ImageWidth&,ImageHeight&,w&,h&,ImageX&,ImageY&
    Command& = Long(PictureObject&,0)
    'RENDERN vorbereiten
    'Breite und Hoehe auslesen
    Call(@Long(Command&,&Picture_Get_Width),PictureObject&,addr(w&))
    Call(@Long(Command&,&Picture_Get_Height),PictureObject&,addr(h&))
    'Imagebreite und Hoehe berechnen
    xpixels& = GetDeviceCaps(DC&, 88)
    ypixels& = GetDeviceCaps(DC&, 90)
    ImageWidth&  = (w&*xpixels&)/2540
    ImageHeight& = (h&*ypixels&)/2540
    'Imagebreite und Hoehe an Fenster anpassen falls zu gross
    Aspect! = Imagewidth&/ImageHeight&

    If OR(Imagewidth& > ww&,Imageheight& > hh&)

        ImageHeight& = hh&
        ImageWidth& =  ImageHeight&*aspect!

        If ImageWidth& > ww&

            ImageWidth& = ww&
            ImageHeight& = ImageWidth&/aspect!

        EndIf

    Endif

    'und Einfuegepunkte (Zentrierung) berechnen

    If Center& = 1

        ImageX& = width(%hwnd)/2 - Imagewidth&/2
        ImageY& = height(%hwnd)/2 - Imageheight&/2

    Else

        ImageX& = xx&
        ImageY& = yy&

    Endif

    'auf DC Rendern
    Call(@Long(Command&,&Picture_Render),PictureObject&,DC&,Imagex&,Imagey&,Imagewidth&,ImageHeight&,0,h&,w&,(h&*-1),0)

EndProc

Proc Ole_GetType'Bildtyp ermitteln

    Parameters PictureObject&
    Declare Command&,PicFormat&
    Command& = Long(PictureObject&,0)
    Call(@Long(Command&,&Picture_GetType),PictureObject&,addr(PicFormat&))
    Return PicFormat&

EndProc

Proc Ole_GetHandle'BildHandle ermitteln

    Parameters PictureObject&
    Declare Command&,PicHandle&
    Command& = Long(PictureObject&,0)
    Call(@Long(Command&,&Picture_GetHandle),PictureObject&,addr(PicHandle&))
    Return PicHandle&

EndProc

Proc Ole_FreeImage'Bild freigeben

    Parameters PictureObject&
    Declare Command&
    Command& = Long(PictureObject&,0)
    Call(@Long(Command&,&Picture_Release),PictureObject&)

EndProc

Und zum laden und anzeigen der Bilder diesen Code benutzen:
'############################################
'Bilder mit OLE laden und anzeigen
'############################################
'Andreas Miethe * Juli 2002
'############################################
'ab Profan 7.X
'############################################
'getestet mit Win98, WinME und WinXP
'Laut Microsoft mit WindowNT ab Version 4.0
'und Windows95 lauffaehig
'############################################
'unterstützte Formate :
'BMP,RLE,DIB,JPG,JPE,JPEG,GIF,EMF,WMF,CUR,ICO
'keine animierten Gif's
'############################################
'
'Anwendungsbeispiel
'
'############################################
'
'Prozeduren der Include
'1. Ole_Init -> initialisiert die Ole_Schnittstelle
'------------------------------------------------------------------------------------
'2. Ole_LoadImage -> Laedt das Bild und gibt einen Zeiger auf das Bildobject zurueck
'   Parameter Filename$
'------------------------------------------------------------------------------------
'3. Ole_RenderImage -> Rendert das Bild auf ein DC
'   Parameter   : DC&
'               : FensterHandle des DC
'               : Zeiger auf Bildobject
'               : Einfuegepunkt X
'               : Einfuegepunkt Y
'               : Breite
'               : Hoehe
'               : Flag fuer Zentrierung
'                       1 = Zentrieren X,Y,W und H koenne Null sein
'                       0 = kein Zentrieren X,Y,W und H mussen angegeben werden
'------------------------------------------------------------------------------------
'4. Ole_GetType -> ermittelt den Bildtypen
'   Parameter Zeiger auf Bildobject
'   Rueckgabe   : 1 fuer BITAP
'               : 2 fuer WMF
'               : 3 fuer ICON Oder CURSOR
'               : 2 fuer EMF
'------------------------------------------------------------------------------------
'5. Ole_FreeImage -> gibt das Bildobject frei
'   Parameter Zeiger auf Bildobject
'------------------------------------------------------------------------------------
'6. Ole_Free -> gibt die Ole_Schnittstelle und Speicherbereich frei
'------------------------------------------------------------------------------------
'7. Ole_LoadResImage -> Laedt das Bild aus einem Modul und
'                       gibt einen Zeiger auf das Bildobject zurueck
'   Parameter   : 1 = ModulHandle
'               : 2 = Resource-Name
'               : 3 = Resource-Typ
'------------------------------------------------------------------------------------
 $I profalt.inc'erspart etliche Reparaturen - fürs schnelle Testen...
 $I Ole_LoadImage.inc
DECLARE PictureObject&,Picture$,Type&
window 0,0-%maxx,%Maxy
cls rgb(192,192,192)
Ole_Init()

If Picture$ = ""

    Picture$ = LoadFile$("ÖFFNE","alle unterstützten Formate|*.dib;*.bmp;*.rle;*.jpe;*.jpeg;*.jpg;*.gif;*.ico;*.cur;*.emf;*.wmf|\
    Bitmap (bmp,rle,dib)|*.bmp;*.rle;*.dib|Jpeg (jpg,jpe,jpeg)|*.jpg;*.jpe;*.jpeg|Gif (gif)|*.gif|\
    Enhanced Metafile (emf)|*.emf|Metafile (wmf)|*.wmf|Icons (Ico)|*.ico|Cursor (cur)|*.cur")

endif

If Picture$ <> ""

    UseCursor 2
    'Ole_LoadResImage 0,"#100","JPEG"
    PictureObject& = Ole_LoadImage(Picture$)

    If PictureObject& > 0

        Ole_RenderImage(%hdc2,%hwnd,PictureObject&,0,0,width(%hwnd),height(%hwnd),1)
        Repaint'Update
        Type& = Ole_GetType(PictureObject&)
        Case Type& = 1: Settext %hwnd,"Bitmap"
        Case Type& = 2: Settext %hwnd,"WMF"
        Case Type& = 3: Settext %hwnd,"Icon / Cursor"
        Case Type& = 4: Settext %hwnd,"EMF"
        UseCursor 0
        Ole_FreeImage(PictureObject&)

    else

        MessageBox("Falsches Grafikformat ! Oder Datei beschädigt","Meldung",0)

    Endif

endif

waitinput
Ole_Free()
End
Gruss
Andreas
 
08.08.2011  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.186 Betrachtungen

Unbenanntvor 0 min.
H.Brill18.02.2024
Alibre25.01.2024
Langer18.12.2021
Georg Teles02.08.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie