PNG w Delphi

Darkhog

Na wstępie chciałbym dodać, że jest to mój pierwszy artykuł, więc mogą być w nim błędy

Najpierw należy zainstalować archiwum pngdcus (są tam wszystkie niezbędne pliki):
pngdcus.zip

No więc ściągamy archiwum i rozpakowujemy do (katalog instalacji delphi)\lib (na przykład C:\program files\borland\delphi7\lib) Plik działa na wersjach od 6 do 2007. Żeby otworzyć taki plik wystarczy potem zwykły... TImage. Dostajemy też nowy obiekt - TPNGObject. Oczywiście, żeby zadziałało musimy podać
Jego obsługa wygląda następująco:

Metody:

constructor Create; //(to wiadomo)
destructor Destroy; //zaleca się użycie metody Free, której nie będziemy tu omawiali, bo należy do metod dziedziczonych
procedure Resize; (const cx,cy:Integer); //ta metoda służy jak sama nazwa skazuje do zmiany rozmiaru
procedure CreateAlpha; //Tworzy kanał Alpha. nie wiem jak działa, spisuję to wszystko z listy udostępnianej przez Code Completion
procedure RemoweTransparency; //nazwa sugeruje działanie odwrotne do CreateAlpha
procedure AddtEXt(const keyword,text:string); // dodaje tekst
procedure AddzTXt(const keyword,text:string); // podobne do poprzedniej. Szczerze mówiąc to nie wiem czym się różni.
procedure.RaiseError(ExceptionClass:ExceptClass, Text:String); //przyda się do obsługi wyjątków

Właściwości:

GammaTable: array[byte] of byte; //tablica Gamma?
TransparentColor: TColor //Kolor przezroczystości
ScanLine[Index:Integer]:Pointer;    // nie wiem co te dwie
ExtraScanLine[Index:Integer]:Pointer; // właściwości robią
PixelInformation: TChunkpHYs;

Aha i to nie są wszystkie metody i własciwości. Kto jest chętny, niech zmodyfikuje artykuł. Po za tym większości metod i właściwości tego obiektu nie rozumiem, ale jak na poczatek starczy.

//...............................................................................................................................................................
Dopisna przez DeGeneRator 06.01.2009

No to jeszcze raz od początku ściągamy archiwum PNGImage z
http://gsaraiva.projects.pro.br/downloads/?id=pngdelphi
potem odpalamy delphi i w menu głównym zakładka Componets->Install Componet dalej w nowym oknie Unit File Name podajemy sciezke do pliku z rozszeżenie .pas i tak ze wszystkim plikami z tego archiwum następnie w innym oknie które się pojawi dajemi compile i wyłączamy Delphi.
Potem kopujemy pliki z tego archiwum do folderu np. C:\Program Files\Borland\Delphi6\Lib
i to wszystko. Przyokazji archium PNGImage warto wypakować w dowolnym miejscu ale jakimś sensownym.

No i taki przykład jak wyświetlić plik PNG

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, pngextra, PNGImage, StdCtrls, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    Image1: TImage;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Open1: TMenuItem;
    OpenDialog1: TOpenDialog;
    procedure Open1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Open1Click(Sender: TObject);
var PNG: TPNGObject;
    BMP: TBitmap;
begin
   Form1.OpenDialog1.Filter :='*.PNG';
   Form1.OpenDialog1.FileName := '*.PNG';
   if Form1.OpenDialog1.Execute then
   Begin
   PNG := TPNGObject.Create;
   BMP := TBitmap.Create;
   PNG.LoadFromFile(Form1.OpenDialog1.FileName);
   BMP.Assign(PNG);
   Form1.Image1.Picture.Bitmap := BMP;
   BMP.Free;
   PNG.Free;
   End;
end;

end.

Przykład działa sprawdziłem w delphi 6 no i tyle
See then be good bye bye
//............................................................................................................................................

FAQ

4 komentarzy

@Piotrekdp - Paczka którą podałeś jest bardzo dobra. Pliki PNG działają tak jak powinny- pełna przeźroczystość. Co najlepsze- nie trzeba nic kombinować w kodzie projektu. Poprostu korzystamy tylko z TImage i tam już mamy do wyboru dodatkowe rozszerzenie PNG. Polecam i dziękuję za paczuszkę.

Przeniosłem do FAQ.

ale to wszystko jest w dokumentacji dołaczonej do Bibloteki
http://www.trichview.com/resources/thirdparty/pngimage.zip
tyle co napisałeś to wiadomo po nagłówkach jeśli to ma być art
przydał by się przykład.
chęci dobre ale na art to to nie za bardzo się nadaje .