AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm Design mit TPNGObject

Ein Thema von sportkeks · begonnen am 29. Aug 2012 · letzter Beitrag vom 1. Sep 2012
Antwort Antwort
Seite 1 von 3  1 23      
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#1

Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:05
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:

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

png.AlphaScanline(...

auf das andere Png, endet das ganze hochgerechnet auf alle zu zeichnenden Bilder in einem "Performalen" Disaster!!!

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

Grüße

Der Keks


Ps. ich verwende Turbodelphi
Now we're taking a break to eat some cake.

Geändert von sportkeks (29. Aug 2012 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:10
Paintbox.Canvas.Draw(x,y,PNGIMG) behält doch alle Transparenzen bei, oder habe ich Dich falsch verstanden ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#3

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:16
Ja das ist richtig aber ich möchte ja vorher auf ein Offpng zeichnen um das mal zu verdeutlichen:

Delphi-Quellcode:
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);
schreibe ich das so...:

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
Now we're taking a break to eat some cake.

Geändert von sportkeks (29. Aug 2012 um 15:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:27
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#5

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:38
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

aber trotzdem Danke für den Beitrag
Miniaturansicht angehängter Grafiken
png-transparent.png  
Now we're taking a break to eat some cake.

Geändert von sportkeks (29. Aug 2012 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:42
Dann haben wir uns noch nicht richtig verstanden, bei mir sieht es aus wie im Anhang, wie soll es denn aussehen ?
Miniaturansicht angehängter Grafiken
bild-1.png  
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#7

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:53
ja genau so soll es aussehen !!! aber so bekomme ich es nicht hin welche Delphi Version nutzt du ????

In turbodelphi gibt es anscheinend kein

bmp.alphaformat := afDefined; deswegen hat es bei mir auch nie funktioniert

aber das wäre dem ziel schon sehr nah
Now we're taking a break to eat some cake.

Geändert von sportkeks (29. Aug 2012 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 15:57
Ich verwende XE, von Turbodelphi habe ich keine Ahnung, gegf. kommst Du dort mit GDI+ weiter?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#9

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 16:08
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
Now we're taking a break to eat some cake.
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#10

AW: Programm Design mit TPNGObject

  Alt 29. Aug 2012, 18:55
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;
image.SetResolution(...
funktioniert leider nicht O.o
Now we're taking a break to eat some cake.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz