Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PNG-Graphik über "System" laden ... ? (https://www.delphipraxis.net/102058-png-graphik-ueber-system-laden.html)

turboPASCAL 22. Okt 2007 21:27


PNG-Graphik über "System" laden ... ?
 
XP kann es, Vista kann es... nur ich kann es nicht.

Windows XP und (ins besondere) Vista können von Haus aus PNG - Graphiken laden und anzeigen.
Das müsste man doch dann auch für Delphi nutzen. Wie stellt man das denn an ?

Jelly 22. Okt 2007 21:40

Re: PNG-Graphik über "System" laden ... ?
 
Du könntest PNGImage nutzen.

turboPASCAL 22. Okt 2007 22:16

Re: PNG-Graphik über "System" laden ... ?
 
Zitat:

Zitat von Jelly
Du könntest PNGImage nutzen.

Mach ich ja auch. ;)

Zitat:

PNG-Graphik über das Windows "System" laden
PNG-Graphik über das Windows "System" laden, GDI oder GDI+ oder so... :gruebel:

Lossy eX 23. Okt 2007 08:01

Re: PNG-Graphik über "System" laden ... ?
 
Die GDI kann es meines Wissens nach nicht aber GDI+ kann es.

http://www.codeproject.com/vcpp/gdip...plusbitmap.asp
Ist zwar C++ aber sollte grundsätzlich ja gleich sein.

Bzw sind in den Beispielen bei der GDI+ Übersetzung auch PNGs enthalten.

turboPASCAL 23. Okt 2007 18:43

Re: PNG-Graphik über "System" laden ... ?
 
Danke, das hilft schon mal was weiter.

mimi 26. Okt 2007 13:56

Re: PNG-Graphik über "System" laden ... ?
 
oder nutze : http://www.lazarusforum.de/viewtopic.php?t=434
müsste auch unter Delphi Laufen.

Aber es gibt viele Möglichkeiten unter Delphi:
z.b. eine davon währe einfach TGrafik32 zu nutzen, wobei Grafik englisch sein muss(das kann ich leider nicht schreiben)

turboPASCAL 26. Okt 2007 14:16

Re: PNG-Graphik über "System" laden ... ?
 
Ich will ja keine Komponenten in dem Sinne. Windows, bzw. die GDI+ von Windows kann
PNG's laden und Anzeigen. Warum soll ich dann ein oder mehrere "fette" Unit(s) einbauen.
;)

mimi 26. Okt 2007 14:27

Re: PNG-Graphik über "System" laden ... ?
 
opBitmap sind keine Komponenten, es sind einfache units und müssen noch nicht mal Installiert sein.
die Können neben png, auch noch andere Formate anzeigen.
oder z.b. halbtranparente Flächen zeichnen.....

Allerdings verwendet opBitmap zwischen Format d.h. du musst es von bitmap nach disem Format umwandeln.
Ich habe einige Vereinfachungen geschrieben.

Das Projekt wurde aber nicht von mir entwickelt sondern von theo ein Mitglied vom Lazarus-Forum......

xaromz 26. Okt 2007 14:29

Re: PNG-Graphik über "System" laden ... ?
 
Hallo,

auf www.progdigy.com findest Du eine Umsetzung von GDI+ für Delphi. Da sind auch Beispiele dabei.

Gruß
xaromz

Bernhard Geyer 26. Okt 2007 14:49

Re: PNG-Graphik über "System" laden ... ?
 
Zitat:

Zitat von turboPASCAL
Ich will ja keine Komponenten in dem Sinne. Windows, bzw. die GDI+ von Windows kann
PNG's laden und Anzeigen. Warum soll ich dann ein oder mehrere "fette" Unit(s) einbauen.
;)

- Du mußt auf alten Windows-Versionen die GDI+-DLLs mitschleppen
- Wenn du die mitlieferst mußt du darauf hoffen das nicht wieder mal ein Bug in irgendeiner GDI+Implementierung von Zeichenroutinen vorhanden ist welche dein Programm anfällig für Angriffe macht
- Kann die GDI+-Implementierung wirklich komplett PNG oder nur die MS-Interpretations von PNG (siehe fehlende Transparent bei PNG's bis IE7)

mimi 26. Okt 2007 14:57

Re: PNG-Graphik über "System" laden ... ?
 
Wie gesagt ich kann dir nur opBitmap empfehlen.
Ob du das auch für Komizelle Projekte(also Projekte wo für du Geld bekommst) verwenden darf, weiß ich nicht.
Aber wenn ja, dann währe es die "beste" Möglichkeit....
(schleichwerbung *G*)

xaromz 26. Okt 2007 15:41

Re: PNG-Graphik über "System" laden ... ?
 
Hallo,
Zitat:

Zitat von Bernhard Geyer
- Du mußt auf alten Windows-Versionen die GDI+-DLLs mitschleppen

Bei der Markdurchdringung von XP kaum mehr ein Problem.
Zitat:

Zitat von Bernhard Geyer
- Wenn du die mitlieferst mußt du darauf hoffen das nicht wieder mal ein Bug in irgendeiner GDI+Implementierung von Zeichenroutinen vorhanden ist welche dein Programm anfällig für Angriffe macht

Das Problem hast Du bei anderen Komponenten genauso.
Zitat:

Zitat von Bernhard Geyer
- Kann die GDI+-Implementierung wirklich komplett PNG oder nur die MS-Interpretations von PNG (siehe fehlende Transparent bei PNG's bis IE7)

Meines Erachtens ist die Implementierung komplett. Transparenzen funktionieren, verschiedene Farbräume, mehrere Bilder in TIFF-Dateien... alles vorhanden.

Gruß
xaromz

Bernhard Geyer 26. Okt 2007 16:12

Re: PNG-Graphik über "System" laden ... ?
 
Zitat:

Zitat von xaromz
Bei der Markdurchdringung von XP kaum mehr ein Problem.

Damit würdest du bei einigen unserer Kunden probleme haben ...

Zitat:

Zitat von xaromz
Das Problem hast Du bei anderen Komponenten genauso.

Der Angriffspunkt ist offensichtlicher.

Zitat:

Zitat von Bernhard Geyer
Meines Erachtens ist die Implementierung komplett. Transparenzen funktionieren, verschiedene Farbräume, mehrere Bilder in TIFF-Dateien... alles vorhanden.

Und wieso war MS so lange nicht fähig das auch im IE anzubieten?

xaromz 26. Okt 2007 19:47

Re: PNG-Graphik über "System" laden ... ?
 
Hallo,
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von xaromz
Bei der Markdurchdringung von XP kaum mehr ein Problem.

Damit würdest du bei einigen unserer Kunden probleme haben ...

Kommt natürlich immer auf den Kunden an, das ist klar.
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von xaromz
Das Problem hast Du bei anderen Komponenten genauso.

Der Angriffspunkt ist offensichtlicher.

Selbstverständlich.
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von xaromz
Meines Erachtens ist die Implementierung komplett. Transparenzen funktionieren, verschiedene Farbräume, mehrere Bilder in TIFF-Dateien... alles vorhanden.

Und wieso war MS so lange nicht fähig das auch im IE anzubieten?

Weil der IE kein GDI+ verwendet?

Gruß
xaromz

grenzgaenger 26. Okt 2007 19:58

Re: PNG-Graphik über "System" laden ... ?
 
es gibt halt noch sehr viele firmen, welche WIN2000 oder sogar NT noch einsetzen. da ist von XP noch keine spur.

firmen sind halt meist nicht so technikgeil, wie manche (private) anwender. bei dennen muss es halt einfach funktionieren und darf nix (nicht viel) kosten.

also, auch das die welt vor dem jahr 2000 nicht ganz vergessen (der normale updatezyklus liegt so bei 10 jahren)...

grüsse
gg

Bernhard Geyer 26. Okt 2007 20:07

Re: PNG-Graphik über "System" laden ... ?
 
Zitat:

Zitat von grenzgaenger
es gibt halt noch sehr viele firmen, welche WIN2000 oder sogar NT noch einsetzen. da ist von XP noch keine spur.

NT ist eigentlich nicht mehr anzutreffen. Vereinzelt noch Win98.

Ich meine eher mit der Bindung an GDI+ verliert man einen Nachteil von Delphi. Und zwar das man ohne was mitzuliefern was man installieren sollte bzw. je nach Windows Version schon Bestandteil dieser Windows-Version ist die Windows-Plattformunabhängigkeit verliert. Setzt man eh nur XP und neuer vorraus so ist der Nachteil geringer da man hier nix mitliefert und gut ist (haben wir z.B. mit mindestens IE4 als Vorraussetzung).

turboPASCAL 26. Okt 2007 23:04

Re: PNG-Graphik über "System" laden ... ?
 
Also, die bzw. das Programm ist eh ab Windows XP. windows Vista arbeitet bei seinen Styles
nur noch mit PNG's was mich ein wenig erstaunt hat.
Komerzielle Programme schreib ich zur Zeit nicht, ist also nicht das Problem.

Irgend wer hatte mal in der DP für nonVCL einen JPG-Button gezeigt der die Graphic
ohne die VCL sondern über die Betriebssystem vorhandenen Funktionen läd (GDI+ denk ich mal).
Ich finde es nur nicht. Ich glaube x000x war's.

x000x 19. Aug 2008 16:56

Re: PNG-Graphik über "System" laden ... ?
 
Moin moin,
Habe grad mal alte Beiträge durchgestöbert und bin bei diesem hängengeblieben...
Der gesuchte Thread befindet sich hier: Speicherreservierung / Verständnisfrage

lbccaleb 22. Okt 2008 14:31

Re: PNG-Graphik über "System" laden ... ?
 
Seid Ihr hier jetzt noch weiter gekommen?? Hat vllt einer nen Bsp., wie ich PNGs laden kann??!! Aber ohne VCL..

Danke..

turboPASCAL 23. Okt 2008 00:50

Re: PNG-Graphik über "System" laden ... ?
 
Zitat:

Hat vllt einer nen Bsp., wie ich PNGs laden kann??!! Aber ohne VCL..
Ja, habe ich.
Such mal un der DP nach dem Hier im Forum suchenGoldfisch oder Hier im Forum suchenBlupp :gruebel: von mir.
Ist irgend wo in der OS Sparte.
Da ist eine MiniGDIPlus.pas von mir da bei. Mit deren Hilfe geht das ohne VCL.

EWeiss 23. Okt 2008 18:54

Re: PNG-Graphik über "System" laden ... ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oder hier das

gruss Emil

lbccaleb 24. Okt 2008 09:14

Re: PNG-Graphik über "System" laden ... ?
 
ich hab es schon über die gdi hinnbekommen, aber bisher ohne alpha wert...

ich weiß nicht woran es liegt ;-(
wollte eigentlich nur ein png mit transparenz laden und als hintergrund für das fenster verwenden, nur irgendwie will er nicht ;-( das laden und das anzeigen hab ich hinnbekommen..

turboPASCAL 24. Okt 2008 10:52

Re: PNG-Graphik über "System" laden ... ?
 
VCL oder nonVCL ?

lbccaleb 24. Okt 2008 11:04

Re: PNG-Graphik über "System" laden ... ?
 
nonvcl, ist das ganze, vcl währe ja easy oO

turboPASCAL 24. Okt 2008 14:02

Re: PNG-Graphik über "System" laden ... ?
 
- 32 Bit-Bitmap erstellen mit CreateBitmap
- Window mit SetLayeredWindowAttributes und LWA_ALPHA bearbeiten
- png_image laden
- im WM_PAINT das Png aufs Fenster pappen
- fertig

:stupid:

EWeiss 24. Okt 2008 14:55

Re: PNG-Graphik über "System" laden ... ?
 
Hier ein Sample
mußt selbst übersetzen dürfte aber kein problem sein.

Delphi-Quellcode:
Private Function MakeTrans(pngPath As String) As Boolean
Dim tempBI As BITMAPINFO
Dim lngHeight As Long
Dim lngWidth As Long
Dim curWinLong As Long
Dim img As Long
Dim graphics As Long
Dim winSize As Size
Dim srcPoint As POINTAPI
    With tempBI.bmiHeader
        .biSize = Len(tempBI.bmiHeader)
        .biBitCount = 32
        .biHeight = ScaleHeight
        .biWidth = ScaleWidth
        .biPlanes = 1
        .biSizeImage = .biWidth * .biHeight * (.biBitCount / 8)
    End With
        mDC = CreateCompatibleDC(hdc)
        mainBitmap = CreateDIBSection(mDC, tempBI, DIB_RGB_COLORS, ByVal 0, 0, 0)
        oldBitmap = SelectObject(mDC, mainBitmap)
        Call GdipCreateFromHDC(mDC, graphics)
        Call GdipLoadImageFromFile(StrConv(pngPath, vbUnicode), img)
        Call GdipGetImageHeight(img, lngHeight)
        Call GdipGetImageWidth(img, lngWidth)
        Call GdipDrawImageRect(graphics, img, 0, 0, lngWidth, lngHeight)
        curWinLong = GetWindowLong(hwnd, GWL_EXSTYLE)
        SetWindowLong hwnd, GWL_EXSTYLE, curWinLong Or WS_EX_LAYERED
        SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
        srcPoint.x = 0
        srcPoint.y = 0
        winSize.cx = lngWidth
        winSize.cy = lngHeight
    With blendFunc32bpp
        .AlphaFormat = AC_SRC_ALPHA
        .BlendFlags = 0
        .BlendOp = AC_SRC_OVER
        .SourceConstantAlpha = 255
    End With
Call GdipDisposeImage(img)
Call GdipDeleteGraphics(graphics)
Call UpdateLayeredWindow(hwnd, hdc, ByVal 0&, winSize, mDC, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)
End Function
Alle Call's entfernen ..

gruss Emil

lbccaleb 24. Okt 2008 18:02

Re: PNG-Graphik über "System" laden ... ?
 
ok, danke werd ich mal so probieren, eine frage hätt ich aber noch ;-)
wie genau lade ich das png direkt aus der ressource??

turboPASCAL 24. Okt 2008 19:12

Re: PNG-Graphik über "System" laden ... ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Natürlich UpdateLayeredWindow verwenden an stelle von SetLayeredWindowAttributes, ich Schussel. :wall:

Im Anhang ist eine Demo mit der du die Images auch aus der Resource laden kannst.

Mithrandir 11. Okt 2009 20:56

Re: PNG-Graphik über "System" laden ... ?
 
Moin Matti,

wollte mir deinen Code mal zu lernzwecken angucken. Aber irgendwie hast du den Ordner "_unit" vergessen. Also, falls du den noch irgendwie haben solltest.... :stupid:

lbccaleb 11. Okt 2009 21:04

Re: PNG-Graphik über "System" laden ... ?
 
Mhh er hat schon eine neuere Version erstellt, vllt ists Absicht das er den Ordner entfernt hat!

Wenn nicht, ich müsste glaub ich die alte Version noch irgendwo auf meinem alten Notebook haben, muss ich morgen mal durchforsten und suchen :)
Wenn ichs finde kann ichs ja noch mal hier anhängen....
Wenn er damit einverstanden ist :gruebel:

turboPASCAL 11. Okt 2009 22:56

Re: PNG-Graphik über "System" laden ... ?
 
In der Tat, der Ordner "_unit" ist leer, :gruebel:
Naja, ab einem gewissen Alter ...

Ich habe es mir gerade auf meiner Festplatte noch mal angesehen und festgestellt das dieses Ding nicht zu gebrauchen ist.
Der Grund, es werden keine Controls, also Buttons, Edits etc. dargestellt. Das wollte ich mal Ändern, habe es aber nie weiter fortgesetzt.
war mir zu aufwendig

Möchtest du das Demo für die VCL oder nonVCL ?

Mithrandir 12. Okt 2009 04:39

Re: PNG-Graphik über "System" laden ... ?
 
Moin Matti,

nonVCL wäre super. Meine Vorhaben ist eigentlich simpel: Gebe ich einem Static-Control die Eigenschaft SS_BITMAP oder SS_ICON, dann kann ich darauf das jeweilige Format abbilden. Nun bilde ich mir ein, dass, wenn ich SS_OWNERDRAW nutze, ich dank GDI+ auch ein PNG-Image aus einer Resource laden kann.

Ich hab dein altes Projekt über Umwege schon heute morgen erhalten, konnte es mir aber nicht ansehen. Kann man das als Grundlage nutzen, um selber auf die weitere Vorgehensweise zu kommen?

//Nachtrag: Ich scheitere schon am Laden der Resource. :wall:
Delphi-Quellcode:
GdipLoadImageFromResource(hInstance, 'ALBUM', gpImage)
gpImage hat immer den Wert "nil". :wall: Die Funktion, die Funktion aufruft liefert auch keinen Fehler. :gruebel:

turboPASCAL 12. Okt 2009 08:54

Re: PNG-Graphik über "System" laden ... ?
 
Sick's mal bitte.

Mithrandir 12. Okt 2009 09:03

Re: PNG-Graphik über "System" laden ... ?
 
Sie haben Post. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz