Français
Forum

PNG avec canal alpha sans ProSpeed.dll

 

Marcus
Mayer
allô allerseits!

je hätte là la fois ne Frage: Ist es possible, avec bordeigenen Mitteln (sprich seulement avec GDIPlus o.ä.) PNG avec canal alpha im Client-Bereich des XProfan-Fensters trop zeichnen, sans qui ProSpeed.dll trop verwenden?
(sous Win7)

Habe seiner Zeit avec Profan 6 trop programmieren begonnen et était aussi jusqu'à Version 7.5 droite appliqué dabei. Allerdings habe je ensuite une droite longtemps récréation gemacht et quelques Neuerungen verschlafen. là je programmiertechnisch wohl assez eingerostet suis, werde je aus so mancher Geschichte comment z.B den Layered Windows pas entier malain.
 
08.05.2010  
 



allô Marcus,

Andreas Miethe hat "LayeredWindow avec Alphakanal"  [...]  bereitgestellt -

j'ai cela unlieb grave verwürgt - mais es zeichnet PNGs:
KompilierenMarqueSéparation
Gemerkt/Separiert von http://xprofan.com/t/?7898 (Andreas Miethe)
###############################
Layered-Window mit PNG
und GDIPlus
###############################

If Val($winver) < 5

    Messagebox("Die Windows-Version wird nicht unterstützt","Sorry",0)
    End

Endif

###############################
Imports
###############################
Var GdiPlus& = ImportDll("GDIPlus.dll","")
###############################
###############################
Header-Dateien
 $H windows.ph
 $H Messages.ph
###############################
###############################
Strukturen
###############################
Struct GdiplusStartupInput = GdiplusVersion&,DebugEventCallback&,SuppressBackgroundThread&,SuppressExternalCodecs&
Struct Size = cx&,cy&
Struct Point = x&,y&
Struct Blendfunction = a#(4)
###############################
Var WW& = 280                                     Bildbreite
Var WH& = 280                                     Bildhöhe
###############################
cls
~SetClassLong(%hwnd,~GCL_STYLE,(~GetClassLong(%hwnd,~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
SetStyle %Hwnd,1, GetStyle(%hwnd,1) | $80000       erweiterten Window-Stil setzen
Var GdiplusToken& = InitGDIPlus()                  GDIPlus initialisieren
Var IObject& = GdipLoadImage("BackPic.png")        PNG mit Alphakanal laden
Var bm& = ~CreateBitmap(ww&,wh&,1,32,0)            32-Bit Bitmap anlegen
Var DC& = ~CreateCompatibleDC(0)                   DC-anlegen
~SelectObject(DC&,bm&)                             Bitmap ins DC
Var Graphics& =  0
GdipCreateFromHdc(%hDC,Addr(Graphics&))             Zeichnungs-Object anlegen
GdipSetSmoothingMode(Graphics&,2)                  weicher zeichnen
GdipDrawImageRectI(Graphics&,IObject&,0,0,ww&,wh&) Bild zeichnen
GdipDrawImageRectI(Graphics&,IObject&,50,50,ww&,wh&) Bild zeichnen
GdipDeleteGraphics(Graphics&)                      Zeichnugs-Object freigeben
GdipDisposeImage(IObject&)                         Bitmap feigeben
ExitGDIPlus(gdiplusToken&)                         GDIPlus beenden
waitinput
end
Parameter für UpdateLayeredWindow vorbereiten
Var Size# = New(Size)
Var Point# = New(Point)
Var Blendmode# = New(Blendfunction)
Clear Blendmode#,Point#,Size#
Size#.cx& = ww&
Size#.cy& = wh&
Byte Blendmode#,2 = 255
Byte Blendmode#,3 = 1
External("User32.dll","UpdateLayeredWindow",%hwnd, 0, 0, Size#,DC&,Point#,0,Blendmode#, 0)
UpdateLayeredWindow() übernimmt das Zeichnen/Neuzeichen des Fensters !
Die benötigten Daten zum Zeichnen holt sich die Funktion direkt vom DC !
Das geht extrem schnell, da Windows keinen weiteren Speicher reservieren muss.
Hautpschleife
#############
Var Ende& = 0

Whilenot Ende&

    Waitinput

    If %MousePressed = 1

        Sendmessage(%hwnd,$0112,$0F012,0)

    ElseIf %MousePressed = 2

        OnEnd()

    Endif

EndWhile

Ende-Procedur
###############################

Proc OnEnd

    Dispose Size#,Point#,Blendmode#
    ~DeleteDC(DC&)
    ~DeleteObject(bm&)
    Ende& = 1

EndProc

###############################
###############################
GDIPLUS
###############################

Proc InitGDIPlus

    Declare gdiplusToken&
    Var gdpsi# = New(GdiplusStartupInput)
    gdpsi#.GdiplusVersion& = 1
    gdpsi#.DebugEventCallback& = 0
    gdpsi#.SuppressBackgroundThread& = 0
    gdpsi#.SuppressExternalCodecs& = 0
    GdiplusStartup(ADDR(gdiplusToken&),gdpsi#,0)
    Dispose gdpsi#
    Return gdiplusToken&

EndProc

Proc ExitGDIPlus

    Parameters gdiplusToken&
    GdiplusShutdown(gdiplusToken&)
    FreeDLL GDIPlus&

Endproc

Proc S2WSString to WideString

    Parameters S$
    Declare w$
    w$ = Space$((Len(s$)*2)+1)
    ~MultiByteToWideChar(~CP_ACP, 0, ADDR(s$), -1, ADDR(w$), Len(w$)+1)
    Return w$

EndProc

Proc GDIPLoadImage

    Parameters Image$
    Declare result&,FileW$,Bitmap&
    result& = 0
    FileW$ = S2WS(Image$)
    GdipCreateBitmapFromFile(ADDR(FileW$),ADDR(Bitmap&))

    if Bitmap&

        result& = Bitmap&

    Endif

    return result&

ENDPROC

###############################

s'il te plaît daraus une "brauchbaren" Code faire, hätte je ebenso volontiers.

la ligne
KompilierenMarqueSéparation bestimmt Ausgabe-DC.

(PNG-Bild s'il te plaît aus Andreas seinem paquet magasin.)
 
09.05.2010  
 



Etwas saubereres Beispiel:

Download


KompilierenMarkierenSeparieren
'Gemerkt/Separiert von https://xprofan.com/t/?7898 (Andreas Miethe)
'
'###############################
' Layered-Window mit PNG
' und GDIPlus
'###############################

If Val($winver) < 5

    Messagebox("Die Windows-Version wird nicht unterstützt","Sorry",0)
    End

Endif

'###############################
'Imports
'###############################
Var GdiPlus& = ImportDll("GDIPlus.dll","")
'###############################
'###############################
'Header-Dateien
 $H windows.ph
 $H Messages.ph
'###############################
'###############################
'Strukturen
'###############################
Struct GdiplusStartupInput = GdiplusVersion&,DebugEventCallback&,SuppressBackgroundThread&,SuppressExternalCodecs&
Struct Size = cx&,cy&
Struct Point = x&,y&
Struct Blendfunction = a#(4)
'###############################
Var WW& = 280' Bildbreite
Var WH& = 280' Bildhöhe
'###############################
cls
Var GdiplusToken& = InitGDIPlus()' GDIPlus initialisieren
Var IObject& = GdipLoadImage("BackPic.png")' PNG mit Alphakanal laden
Var bm& = ~CreateBitmap(ww&,wh&,1,32,0)' 32-Bit Bitmap anlegen
Var DC& = ~CreateCompatibleDC(0)' DC-anlegen
~SelectObject(DC&,bm&)' Bitmap ins DC
Var Graphics& =  0
GdipCreateFromHdc(%hDC2,Addr(Graphics&))' Zeichnungs-Object anlegen
GdipSetSmoothingMode(Graphics&,2)' weicher zeichnen

whileLoop 50

    GdipDrawImageRectI(Graphics&,IObject&,rnd(width(%hWnd)-ww&),rnd(height(%hWnd)-wh&),ww&,wh&)' Bild zeichnen

wend

repaint 1
GdipDeleteGraphics(Graphics&)' Zeichnugs-Object freigeben
GdipDisposeImage(IObject&)' Bitmap feigeben
ExitGDIPlus(gdiplusToken&)' GDIPlus beenden
waitinput
OnEnd()
end
'Ende-Procedur
'###############################

Proc OnEnd

    ~DeleteDC(DC&)
    ~DeleteObject(bm&)

EndProc

'###############################
'###############################
'GDIPLUS
'###############################

Proc InitGDIPlus

    Declare gdiplusToken&
    Var gdpsi# = New(GdiplusStartupInput)
    gdpsi#.GdiplusVersion& = 1
    gdpsi#.DebugEventCallback& = 0
    gdpsi#.SuppressBackgroundThread& = 0
    gdpsi#.SuppressExternalCodecs& = 0
    GdiplusStartup(ADDR(gdiplusToken&),gdpsi#,0)
    Dispose gdpsi#
    Return gdiplusToken&

EndProc

Proc ExitGDIPlus

    Parameters gdiplusToken&
    GdiplusShutdown(gdiplusToken&)
    FreeDLL GDIPlus&

Endproc

Proc S2WS'String to WideString

    Parameters S$
    Declare w$
    w$ = Space$((Len(s$)*2)+1)
    ~MultiByteToWideChar(~CP_ACP, 0, ADDR(s$), -1, ADDR(w$), Len(w$)+1)
    Return w$

EndProc

Proc GDIPLoadImage

    Parameters Image$
    Declare result&,FileW$,Bitmap&
    result& = 0
    FileW$ = S2WS(Image$)
    GdipCreateBitmapFromFile(ADDR(FileW$),ADDR(Bitmap&))

    if Bitmap&

        result& = Bitmap&

    Endif

    return result&

ef='./../../references-fonction/xprofan/endproc/'>EndProc

'###############################

1.074 kB
Hochgeladen:09.05.2010
Downloadcounter236
Download
15 kB
Hochgeladen:09.05.2010
Downloadcounter253
Download
57 kB
Kurzbeschreibung: von http://xprofan.com/t/?7898 (Andreas Miethe)
Hochgeladen:09.05.2010
Downloadcounter224
Download
 
09.05.2010  
 




Marcus
Mayer
Erstmal vielen vielen Dank pour qui schnelle Antwort!
Kanns à peine erwarten, cela ganze auszuprobieren.
 
12.05.2010  
 




Marcus
Mayer
alors nochmals vielen Dank pour qui tolle Antwort. je versteh zwar pas im Detail, comment cela ganze funktioniert, konnte mir mais une Include-Dossier bricoler, um avec einem schönen Einzeiler beliebig PNGs trop zeichnen. oui c'est ca quoi je voulais
Sollte cela ganze dans späteren Projekten Anwendung trouver, nenne je qui edlen Code-Spender naturellement
 
23.05.2010  
 




alors nochmals vielen Dank pour qui tolle Antwort. je versteh zwar pas im Detail, comment cela ganze funktioniert, konnte mir mais une Include-Dossier bricoler, um avec einem schönen Einzeiler beliebig PNGs trop zeichnen. oui c'est ca quoi je voulais


Gerne geschehen!


Sollte cela ganze dans späteren Projekten Anwendung trouver, nenne je qui edlen Code-Spender naturellement


Poste doch qui dabei herausgekommene Include chez den Comprend  [...]  - avons wiederum alle quelque chose en - hätte je z.B. aussi volontiers.
 
23.05.2010  
 



Marcus Mayer, Beitrag=57235, Zeitpunkt=27.05.2010
Mach je doch glatt.^ ^
Bevor je qui Include cependant officiel zur Disposition lieu, serait je vous ici volontiers nochmal vorab zur
Durchsicht posten. je peux aussi encore volontiers une kleinen Beispiel-Code hinzufügen, si gewünscht.
Wird mais wohl pas nötig son


Ah, je comprends quoi Du meinst - cependant aussi cet Besprechung zur Entstehung qui Include sollte vlt. besser im Include-Fil zur Disposition stehen - bof pour ist es oui qui Include-Fil. ^ ^ c'est aussi légitime z.B. Comprend- ou bien Programme ou bien ... -Threads comme Ideengrundlage seulement avec einer Skizze trop posten, um y seulement trop entwickeln ou bien autre à qui Entwicklung teilhaben trop laisser.

Hinweis: tu peux jederzeit Votre Sujets/ Posts/ Fichiers/ Comprend/ Programme... etc. jederzeit Travailler et effacer - hierzu simple sur cela Beitragsdatum klicken.

Wir könnten si Du vouloir qui Include aussi abtrennen trop einem neuen Fil chez den Comprend.
 
27.05.2010  
 




Marcus
Mayer
Okay, ensuite faire wirs so
suis ici dans qui Community oui encore pas espace trop longtemps et kenne qui Gepflogenheiten daher encore pas so.

ensuite wirds wohl aussi Zeit, den Fil ici comme erledigt trop taggen, richtig?
 
27.05.2010  
 



oui c'est ca, je mach cela la fois avant. ^ ^

Nachtrag: eh bien J'ai eu Votre Include herausgeteilt - synchron hattest Du cet aussi chez den Comprend angelegt. Habe den herausgeteilten Fil simple wieder entfernt. ^ ^
 
28.05.2010  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

10.451 Views

Untitledvor 0 min.
Sven Bader22.11.2021
Georg Teles20.08.2021
RudiB.16.08.2021
Normann Strübli14.09.2020
plus...

Themeninformationen

cet Thema hat 2 participant:

iF (5x)
Marcus Mayer (4x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie