2010-03-13 3 views
5

HI! Könnten Sie mir bitte sagen, wie Sie ein .png Bild vergrößern können? Oder geben Sie ein Beispiel. Ich habe lange nach der Antwort gesucht und es scheint, dass niemand weiß, wie man ein .png Bild skaliert und seine Transparenz behält. :(Größe ändern PNG-Bild

Antwort

0

Ich muss gestehen, dass ich programmatisch keine Erfahrung haben mit png zu spielen.
Wie dem auch sei, werden Sie einige Libs finden here. Mit Ausnahme der nativen Unterstützung Delphi PNG, denke ich, die Sie dort finden alle bestehende libs (nativ zu delphi natürlich).

wenn nichts, was man dort hilft, sollten Sie mit ImageMagick zu spielen, wenn möglich ... Dass das Schweizer Taschenmesser der Bildmanipulation ist und alles ist es tun können in der Befehlszeile möglich

2

Sie können Windows Imaging Component (WIC) in Delphi 2010 verwenden. Sie können Ihr PNG-Bild in eine TWICImage Klasse laden, Dann extrahiere die IWICBitmapScaler-Schnittstelle von ihrem Handle.

Mit IWICBitmapScaler können Sie das Bild verkleinern oder vergrößern.

WIC ist unter Windows Vista und Windows 7 verfügbar. Für Windows XP müssen Sie vor der Verwendung ein Update installieren.

20

Der ursprüngliche Autor der PNGImage-Komponente (die Basis der nativen Delphi-Komponente) hatte ein Forum, in dem er und andere Code-Snippets zur Vorgehensweise bei der Verwendung der PNGImage-Komponente veröffentlichten.

Bevor das Forum heruntergenommen wurde, habe ich eine Kopie aller Code-Snippets genommen und sie auf der CodeGear Code Central Website platziert.

Die meisten, wenn nicht alle, funktionieren mit nativen PNG-Bildern und behalten den Alpha-Kanal bei. Hier

ist die komplette Liste der Beispiele im Paket enthalten:

  • glatt dreht ein PNG-Objekt
  • ändert die Größe einen TPNGObject mit einem glatten Algorithmus
  • Scheibe eines PNG in mehr kleineren
  • Speichert ein Bild entweder als Bitmap oder als PNG.
  • Sample-Teil Nachkomme
  • alle Text-Chunks Lesen und Schreiben von Werten in einem TStrings-Objekt
  • Anzeige ein Meldungsfeld mit Informationen aus der Datei PNG extrahiert
  • Finds und schneidet einen Block von einem PNG-Bild
  • Dieses Verfahren wandelt die PNG in eine JPEG-Objekt
  • diese Methode
  • Overlay ein PNG über einen anderen
  • PNG in ein BMP-Objekt konvertiert Dies macht t er Bild halbtransparent
  • Flips ein PNG-Bild vertikal und speichert zurück
  • Zeichnet ein PNG-Bild über den Desktop

Hier ist der Link: CodeCentral PNG Methods

1

Es gibt Versionen von PNGImage (Portable Network Graphics Delphi) Das erlauben es, über einfaches StretchDraw zu tun.

Ich habe Version, die es erlaubt, zu tun - 1.564 (31 Juli 2006)

und Version, die nicht erlaubt - 1,4361 (8. März 2003)

es auszuführen ich verwenden:

Herz .png - mit Transparenz und ich habe es geschafft, die Größe zu ändern und mit Transparenz zu speichern.

empty.png - das reine transparente png. Es wurde als leeres Blatt verwendet, um mein Bild darauf zu setzen.

Ich habe es über einen solchen Code überprüft:

procedure TForm1.Button1Click(Sender: TObject); 
var pic_empty, pic_stamp, pic_result :TPicture; 
    r:TRect; 
    png : TPNGObject; 
begin 

    pic_stamp := TPicture.Create; 
    pic_stamp.LoadFromFile('c:\heart.png'); 
    pic_stamp.Graphic.Transparent := True; 

    pic_empty := TPicture.Create; 
    pic_empty.LoadFromFile('c:\empty.png'); 
    pic_empty.Graphic.Transparent := True; 

    r.Left := 0; 
    r.Top := 0; 
    r.Right := r.Left + 100; 
    r.Bottom := r.Top + 100; 

    pic_result := tpicture.Create; 
    pic_result.Bitmap.Assign(pic_empty.Graphic); 
    pic_result.Graphic.Transparent := True; 
    pic_result.Bitmap.Canvas.StretchDraw(r,pic_stamp.Graphic); 
    pic_result.Bitmap.Width :=100; 
    pic_result.Bitmap.Height:=100; 

    png := TPNGObject.Create; 
    png.Assign(pic_result.Bitmap); 
    png.SaveToFile('c:\result.png'); 

    png.Free; 
    pic_result.Free; 
    pic_empty.Free; 
    pic_stamp.free; 

end; 

Delphi-7, win7 x64