Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PNG anzeigen lassen (https://www.delphipraxis.net/16361-png-anzeigen-lassen.html)

Tanadirian 16. Feb 2004 03:57


PNG anzeigen lassen
 
Hallo

Ich will mir auf nem Formular verschiedene Png-Bilder anzeigen lassen, bekomme das aber nicht hin :-(

Ich hab mir ein Bsp. aus der Delphihilfe rauskopiert aber das funzt nicht da bekomme ich die Fehlermeldung

Delphi-Quellcode:
[Fehler] tbitmap.pas(54): '.' erwartet, aber ';' gefunden
bei
Delphi-Quellcode:
var
 BitMap1: TBitMap;
Hier der Code
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
 BitMap1: TBitMap;

begin
     BitMap1 := TBitMap.Create;
try
   BitMap1.LoadFromFile('c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.png');

   Canvas.Draw(20,20,BitMap1);
finally
   BitMap1.Free;

 end;
end;
Ich hab noch nie mit Grafiken gearbeitet und in der DP auch nichts gefunden, hoffe ihr könnt mir helfen.

clues1 16. Feb 2004 06:47

Re: PNG anzeigen lassen
 
1.
PNG mit TBitMap laden Geht auf jeden fall nicht. Du musst dir von torry.net mal eine PNG Komponente downloaden.

2. Schreib mal deine Uses Klausel, ich schätze mal du hast tbitmap drinne, muss aber graphics lauten.

Bernhard Geyer 16. Feb 2004 12:07

Re: PNG anzeigen lassen
 
Eine sehr gute in Delphi geschriebene PNG-Komponte findest Du unter TPNGImage/PNG Delphi auf Sourceforge.

Delphi bietet von sich aus nur sehr schlechten PNG-Support.

Tanadirian 16. Feb 2004 12:32

Re: PNG anzeigen lassen
 
Hier ein Auszug aus der Delphihilfe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

// Dieses Beispiel zeigt die direkte Ausgabe in ein Bitmap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    // Ersetzen Sie in Windows MyBitmap.png durch den vollständigen Pfadnamen:
    // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
    BitMap.LoadFromFile('MyBitmap.png');
    for y := 0 to BitMap.Height -1 do
    begin

      P := BitMap.ScanLine[y];
      for x := 0 to BitMap.Width -1 do
        P[x] := y;
    end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;
Wegen BitMap.LoadFromFile('MyBitmap.png'); dachte ich das ginge.

Graphics hab ich in der uses drinne


und bei der Sourgeforge-komponente fehlt ihm beim kompilieren die pngimage.dcu

Bernhard Geyer 17. Feb 2004 07:12

Re: PNG anzeigen lassen
 
Wenn die Datei "pngimage.dcu" nicht gefunden werden kannst mußt Du noch den Delphi-Suchpfad ergänzen, so das der Pfad in der die Datei "pngimage.pas" liegt auch aufgenommen ist.

Ist nun mal m.E. 'ne Macke von Delphi hier nicht selbständig den Suchpfad zu ergänzen wenn Packages hinzugefügt werden.

Tanadirian 17. Feb 2004 22:12

Re: PNG anzeigen lassen
 
Danke Bernhard, jetzt gehts weiter, nun fehlt ihm die pngextra.dcu und weder diese dcu oder die pas hab ich auf der Platte. Muß ich da noch extra was downloaden?

Bernhard Geyer 18. Feb 2004 07:20

Re: PNG anzeigen lassen
 
pngextra? Sagt mir nichts. In welcher Unit wird diese verwendet?

Tanadirian 18. Feb 2004 11:55

Re: PNG anzeigen lassen
 
Delphi-Quellcode:
program showcase2;

uses
  Forms,
  showcase2unit in 'showcase2unit.pas' {Form1},
  pngextra in '..\pngextra.pas'; {<-- Hier kommt die Fehlermeldung}

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Tanadirian 18. Feb 2004 15:19

Re: PNG anzeigen lassen
 
Hab die entsprechende Zeile rausgenommen und jetzt geht die Komponente. Nun hab ich aber schon ne neue Frage, kann ich auch einfach nur die pngimage.pas in mein Prog einbinden und dann direkt mit den png's arbeiten? Wenn ja, kennt sich jmd damit aus und kann mir ein paar Stichwörter dazu geben? Ich hab nicht die Zeit mir 5000+ Zeilen Code durchzulesen.

Schon im Voraus vielen Dank.

Bernhard Geyer 18. Feb 2004 16:04

Re: PNG anzeigen lassen
 
Sicher kannst Du damit ohne ein Formular arbeiten, indem du es codemäßig anlegt.

Code:
var
  png: TPngObject;
begin
  png := TPngObject.Create(nil);
  try
    // Dosomething
  finally
    png.Free;
  end;
end;
Was willst machen?

Tanadirian 18. Feb 2004 16:29

Re: PNG anzeigen lassen
 
pixelweise auslesen und dann vergößern indem ich pixel hinzufüge (sollen bei mouseover "herangeholt" werden)

Bernhard Geyer 19. Feb 2004 08:06

Re: PNG anzeigen lassen
 
Pixelweises auslesen wird AFAIK mit der aktuellen Version unterstützt.

Rest kann ich dir keine Tipps geben, da ich Komponente nur für "stupide" Anzeige verwende.

Tanadirian 20. Feb 2004 15:39

Re: PNG anzeigen lassen
 
Hier die Lösung meines Problems


Delphi-Quellcode:
var
  png: TPngObject;
  farbe:TColor;
begin
  png := TPngObject.Create;
  try
    farbe:=png.pixels[x,y]; //Gibt mir die Farbe des Pixels
    png.pixels[x,y]:=clBlack; //Setzt die Farbe des Pixel auf schwarz
  finally
    png.Free;
  end;
end;

Jens Schumann 20. Feb 2004 16:40

Re: PNG anzeigen lassen
 
:shock:

Oh man, wie kann man versehentlich abgeschickte Posting's wieder löschen ???

Oh Gott wie peinlich

Matze 20. Feb 2004 16:43

Re: PNG anzeigen lassen
 
Zitat:

Zitat von Jens Schumann
:shock:

Oh man, wie kann man versehentlich abgeschickte Posting's wieder löschen ???

Oh Gott wie peinlich

Gar nicht, die Mods, S-Mods und natürlich unser Cheffe können dasnur, wir Normaluser nicht.
Wir haben hier echt zu wenig Rechte. :mrgreen:

Treffnix 20. Feb 2004 16:55

Re: PNG anzeigen lassen
 
haha, auch schwarze Katzen getestet :lol:

Tanadirian 20. Feb 2004 17:52

Re: PNG anzeigen lassen
 
Um mal wieder zum Thema des Topics zurückzukommen:

Hab beim Zugreifen auf einzelne Pixel noch nen Bug? entdeckt. Ich konnte nur auf alle ungraden Pixel der X-Achse zugreifen! Erst nachdem ich das Bild mit
Delphi-Quellcode:
PngObject.SaveToFile(Filename)
gespeichert und mit
Delphi-Quellcode:
PngObject.LoadFromFile(Filename)
neu geladen hatte, konnte ich auch auf die geraden Pixel zugreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 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