Español
Foro

PNG con canal alfa sin ProSpeed.dll

 

Marcus
Mayer
Hola a todos!

Yo hätte da ne cuestión de tiempo: ¿Es posible, con los recursos de a bordo (Hable con GDIPlus o.ä.) PNG con canal alfa en el Client-Zona des XProfan-Fensters para dibujar, sin la ProSpeed.dll utilizarse?
(Bajo Win7)

¿Su tiempo comenzó a programar con lo profano y lo fue hasta la versión 6 7.5 bastante fleißig esta. Sin embargo, luego hizo una pausa bastante larga y se durmió a través de algunos cambios. Puesto que soy programación probablemente bastante oxidada, Me gustaría algo de la historia como z.B las capas de Windows inteligentes no del todo.
 
08.05.2010  
 



Hola Marcus,

Andreas ha Miethe "LayeredWindow con Alphakanal"  [...]  previsto -

Yo tengo mal lo siento verwürgt - pero llama la PNGs:
KompilierenMarcaSeparación
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

    volver result&

ENDPROC

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

Por favor, de un "brauchbaren" Hacer el código, hätte También me gusta.

Línea
KompilierenMarcaSeparación determinado Edición-DC.

(PNG-Bild descargue de su paquete de Andreas.)
 
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
Ladeanzahl240
Descargar
15 kB
Hochgeladen:09.05.2010
Ladeanzahl257
Descargar
57 kB
Kurzbeschreibung: von http://xprofan.com/t/?7898 (Andreas Miethe)
Hochgeladen:09.05.2010
Ladeanzahl229
Descargar
 
09.05.2010  
 




Marcus
Mayer
En primer lugar muchas gracias muchas para la respuesta rápida!
No puede esperar, todo el experimento.
 
12.05.2010  
 




Marcus
Mayer
Así que de nuevo muchas gracias para la gran respuesta. No lo entiendo, pero en los detalles, cómo funciona todo, podría yo, sino un Incluir-Expediente remendar, a una schönen De una sola línea para sacar PNGs. Exactamente lo que quería
Si en todos los späteren Los proyectos se aplican, Que yo llamo el noble Code-Spender natürlich
 
23.05.2010  
 




Así que de nuevo muchas gracias para la gran respuesta. No lo entiendo, pero en los detalles, cómo funciona todo, podría yo, sino un Incluir-Expediente remendar, a una schönen De una sola línea para sacar PNGs. Exactamente lo que quería


No hay de qué!


Si en todos los späteren Los proyectos se aplican, Que yo llamo el noble Code-Spender natürlich


Poste, sino que salió en los incluye Incluir  [...]  - A su vez, todos tenemos algo como esto - hätte Yo z.B. También me gusta.
 
23.05.2010  
 



Marcus Mayer, Beitrag=57235, Zeitpunkt=27.05.2010
¿Todavía sin problemas.^ ^
Antes de que la incluyen, pero oficialmente Disposición lugar, sería Me gusta estar aquí otra vez para avanzar
Revisión post. También puede disfrutar de una luz Ejemplo-Code hinzufügen, si gewünscht.
Pero no es así nötig ser


Ah, Entiendo lo que quieres decir - Sin embargo, esta discusión debe incluir la formación del VLT. mejor en Incluir-Hilo disponible posición - naja dafür De hecho, es la Incluir-Hilo. ^ ^ También es legítimo z.B. Incluye- o programas, o ... -hilos para enviar una idea basada en sólo un boceto, con el fin de desarrollar el primer lugar o para que comparta con otros usuarios en el desarrollo.

Referencia: Siempre se puede sus temas/ Beiträge/ Archivos/ Incluye/ Programas... etc. en cualquier momento para editar y löschen - esto, simplemente haga clic en la fecha de revisión.

Wir könnten si möchtest incluir también la desconexión de un nuevo tema para la incluye.
 
27.05.2010  
 




Marcus
Mayer
Okay, luego hacer wirs así
Estoy aquí en la comunidad no hace mucho tiempo y muy consciente de la práctica, por lo tanto, aún no.

Entonces será sin duda también el tiempo, como se hace aquí la etiqueta de roscas en, correcto?
 
27.05.2010  
 



Exactamente, Yo que antes de los tiempos. ^ ^

Apéndice: Ahora tenía herausgeteilt Incluya su - Usted ha creado también la sincronización en la incluye. Acabas de quitar el hilo herausgeteilten. ^ ^
 
28.05.2010  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

10.646 Views

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

Themeninformationen

Dieses Thema ha 2 subscriber:

iF (5x)
Marcus Mayer (4x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie