![]() |
Programm Design mit TPNGObject
Hallo Gemeinde,
Ich wende mich mal wieder Hilfesuchend an euch (nachdem Sufu nix gebracht hat) und hoffe das irgendein schlauer Mensch mir helfen kann. Es geht um ein Programm dessen Design zur zeit komplett aus Tbitmaps besteht und gezeichnet wird, inkl. selbst gezeichneten Buttons etc. Das funktioniert bis her auch echt gut nur möchte ich jetzt gerne auf TPNGObjects umsteigen da diese Transparenzen mit bringen und sich das Design so noch mehr verfeinern lässt. Nun zu meinem Problem: Wie kann ich ein TPNGObject (Performance sparend !!!!) auf ein anderes TNGObject zeichen ? Ein einfaches:
Delphi-Quellcode:
png.Canvas.Draw(100,100,png2);
reicht leider nicht da hierbei die Transparenz nicht mit übertragen wird. Überträgt man den Alphakanal pixel per pixel via
Delphi-Quellcode:
png.AlphaScanline(...
auf das andere Png, endet das ganze hochgerechnet auf alle zu zeichnenden Bilder in einem "Performalen" Disaster!!!
Delphi-Quellcode:
png.Assign(png2);
ist deutlich schneller,überträgt auch den Alphakanal aber ich kann die größe nicht anpassen und schon gar nicht X und Y Koordinaten festlegen :( Das ganze brauche ich um das Offpng zu zeichen(Png >drawto> Png mit X und Y und Resize) welches dann in onpaint() auf eine Paintbox gezeichnet wird. Ich hoffe ihr konntet mir bis hier hin folgen. Wenn jemand eine Idee hat ein Png Performance sparend auf ein anderes Png zu zeichen oder eine bessere Lösung zur Hand hat dann bitte helft mir :cyclops: Grüße Der Keks Ps. ich verwende Turbodelphi |
AW: Programm Design mit TPNGObject
Delphi-Quellcode:
behält doch alle Transparenzen bei, oder habe ich Dich falsch verstanden ...
Paintbox.Canvas.Draw(x,y,PNGIMG)
|
AW: Programm Design mit TPNGObject
Ja das ist richtig aber ich möchte ja vorher auf ein Offpng zeichnen um das mal zu verdeutlichen:
Delphi-Quellcode:
schreibe ich das so...:
Offpng.Canvas.Draw(0,0,png1);
Offpng.Canvas.Draw(0,100,png2); Offpng.Canvas.Draw(0,200,png3); Offpng.Canvas.Draw(0,300,png4); Paintbox.canvas.draw(0,0,offpng);
Delphi-Quellcode:
Paintbox.canvas.draw(0,0,png1);
Paintbox.canvas.draw(0,100,png2); Paintbox.canvas.draw(0,200,png3); Paintbox.canvas.draw(0,300,png4); ...endet das in einem wildem geflacker der Paintbox :? |
AW: Programm Design mit TPNGObject
vielleicht hilft Dir das, der Teil in Button1 ist bis auf
SetAlpha(bmp2,0); realtiv uninteressant ....
Delphi-Quellcode:
type
pRGBQuadArray = ^TRGBQuadArray; TRGBQuadArray = ARRAY[0..$effffff] OF TRGBQuad; Procedure SetAlpha(bmp:TBitMap;Alpha:Byte); var pscanLine32 : pRGBQuadArray; i,j:Integer; begin Bmp.PixelFormat := pf32Bit; bmp.HandleType := bmDIB; bmp.ignorepalette := true; bmp.alphaformat := afDefined; for i := 0 to bmp.Height -1 do begin pscanLine32 := bmp.Scanline[i]; for j := 0 to bmp.Width -1 do begin pscanLine32[j].rgbReserved := Alpha; pscanLine32[j].rgbBlue := 0; pscanLine32[j].rgbRed := 0; pscanLine32[j].rgbGreen := 0; end; end; end; procedure TForm5.Button1Click(Sender: TObject); var Bmp,bmp2: TBitmap; p : TPNGImage; begin Bmp2:=TBitmap.Create; bmp2.Width := 300; bmp2.height := 300; SetAlpha(bmp2,0); p:=TPNGImage.Create; try p.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\48x48\shadow\about.png'); bmp2.Canvas.Draw(20,20,p); bmp2.Canvas.Draw(50,50,p); bmp2.Canvas.Draw(150,50,p); bmp2.Canvas.Draw(50,150,p); Canvas.Draw(100,100,bmp2); finally bmp2.Free; p.Free; end; end; |
AW: Programm Design mit TPNGObject
Liste der Anhänge anzeigen (Anzahl: 1)
Ja die Procedure kommt mir bekannt vor die habe ich auf meiner suche auch schon mal gesehen ;)
aber leider kann ich damit nur die Tansparenz des gesamten Tbitmaps einstellen und nicht wie bei PNG einzelne Bereiche als beispiel: (siehe Anhang) in der Mitte eher undurchsichtig,... ...aber der "Schein" rings rum faded gemächlich aus. und so möchte ich es auch haben :cyclops: aber trotzdem Danke für den Beitrag :thumb: |
AW: Programm Design mit TPNGObject
Liste der Anhänge anzeigen (Anzahl: 1)
Dann haben wir uns noch nicht richtig verstanden, bei mir sieht es aus wie im Anhang, wie soll es denn aussehen ?
|
AW: Programm Design mit TPNGObject
ja genau so soll es aussehen !!! aber so bekomme ich es nicht hin :pale: welche Delphi Version nutzt du ????
In turbodelphi gibt es anscheinend kein
Delphi-Quellcode:
deswegen hat es bei mir auch nie funktioniert :|
bmp.alphaformat := afDefined;
aber das wäre dem ziel schon sehr nah :wink: |
AW: Programm Design mit TPNGObject
Ich verwende XE, von Turbodelphi habe ich keine Ahnung, gegf. kommst Du dort mit GDI+ weiter?
|
AW: Programm Design mit TPNGObject
davon habe ich schon viel gehört aber mich bis her noch nicht rangetraut, ich habe aber gerade ein prima Tutorial auf Delphitreff dazu gefunden vielleicht bekomme ich das ja hin, ich werde es auf jeden Fall mal versuchen.
Danke für deine Hilfe, falls noch weite Lösungsansätze bestehen bin ich für jeden Vorschlag dankbar :) |
AW: Programm Design mit TPNGObject
Okay an einer sache verzweifel ich gerade und zwar möchte ich ganz simpel eigentlich ein TGPBitmap befor ich es in ein TGPCachedBitmap packe vorher resizen.
also:
Delphi-Quellcode:
Image := TGPBitmap.Create('C:/icon.png');
->>> image.ändere_größe_auf_50x50.... oder so ähnlich ^^ <<<---- image2:=TGPCachedBitmap.Create(image,graphics); try for I := 0 to 10 do for I2 := 0 to 10 do begin r.X:=i*50; r.Y:=i2*50; graphics.DrawCachedBitmap(Image2,r.X,r.y); end; finally image.Free; image2.Free; end;
Delphi-Quellcode:
image.SetResolution(...
funktioniert leider nicht O.o |
AW: Programm Design mit TPNGObject
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mir für solche Dinge einen Designer gebaut, damit kann ich leicht angepasste Programmoberflächen bauen und auch von Anderen machen lassen, die weder programmieren können noch den Quellcode kennen.
Alle Objekte auf dem Bild sind klickbar und habe etliche Eigenschaften, die man mit einer Art Objectinspector setzen und auch zu Programmlaufzeit ändern kann. |
AW: Programm Design mit TPNGObject
zu Deinem GP-Problem gibt es bei
![]() einiges zum nachlesen ... |
AW: Programm Design mit TPNGObject
@Bummi
okay vielen dank aber ich sehe leider noch nicht ganz wie mir das weiter helfen soll, ich möchte keine Pages aus einer tif Datei extrahieren, ich möchte gerne ein PNG in ein TGPCachedBitmap speichern und vorher Höhe und Breite festlegen. Denn beim Zeichnen mit
Delphi-Quellcode:
graphics.DrawCachedBitmap(cachedimage,pos_x,pos_y);
bleibt mir keine möglichkeit die größe zu verändern wäre ja auch recht sinnlos wenn ein TGPCachedBitmap erst immer wieder angepasst werden müsste. @Neumann wie sieht es bei deinem Designer mit der Performance aus ? Speziel beim Resizen der Form (ich zeichne ja aus den Bildern das Design des ganzen Programms) sprich wenn viele Images in der Größe und Position angepasst werden müssen ? Und vor allem auf welche Komponenten greifst du zurück? GDI ? PNGDelphi ? delphi 32 ? oder was ganz anderes ? Gruß Der Keks |
AW: Programm Design mit TPNGObject
Die entscheidenden Zeilen waren
Delphi-Quellcode:
wobei Größe ,gewünschtes Pixelformat und MulitFrameImage von Dir zu setzen sind.
dest := TGPBitmap.Create(MulitFrameImage.GetWidth,
MulitFrameImage.GetHeight, PixelFormat16bppRGB565); g := TGPGraphics.Create(dest); g.DrawImage(MulitFrameImage, MakePoint(0, 0)); Also Du erzeugst ein TGPBitmap mit den von Dir gewünschten Parameters, erzeugst dann ein TGPGraphics mit diesem TGPBitmap als "Zeichenfläche", der Rest wie immer .... |
AW: Programm Design mit TPNGObject
Vielen vielen Dank!!!
Jetzt funktioniert es!! Das ist ja der Hammer wie flott das geht mit TGPCachedBitmap lässt sich echt ne menge Performance raus holen you made my day :thumb: *nichtvorhandenenbedankbuttondrück* Gruß Der Keks |
AW: Programm Design mit TPNGObject
@Sportkeks
Ich verwende eine etwas modifiziere Form der Komponente TSimplegraph. Die Performance ist sehr gut. Ein Simplegraph kann über seinen Zoom-Faktor selbst skalieren; alle Objekte werden dann in Größe und Position angepasst. Der grosse Vorteil ist, dass man Programmoberflächen wie mit einem Malprogramm erstellen kann, wenn das eigentliche Programm darauf eingerichtet ist. Ich verwende die Sache jetzt noch relativ speziell für unsere Programme, werde aber mal was allgemein Verwendbares bauen; kann aber noch etwas dauern. |
AW: Programm Design mit TPNGObject
@Neumann
dafür gibt es bei GDI SetWorldTransform und bei GDI+ einen ganzen Stapel von Matrizenfunktionen |
AW: Programm Design mit TPNGObject
@Bummi
Versteh ich jetzt nicht. |
AW: Programm Design mit TPNGObject
Also im allgemeinen kann ich sagen das meine ursprüngliche Frage geklärt ist aber Interessenhaltshalber würde ich gerne mal sehn was du mit dem Designer schon alles auf die Beine gestellt hast vllt ist es ja eine gute alternative
|
AW: Programm Design mit TPNGObject
@Neumann
Möchtest du uns deine Creationen nicht zeigen ? schade -.- |
AW: Programm Design mit TPNGObject
@Sportkeks Doch, werde ich machen. Dauert aber noch ein paar Tage.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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