![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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