Autor Beitrag
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 25.03.07 20:00 
PictureConvert[meta]PNG, JPG, BMP, Konvertieren, Konvertierung, Convert, PictureConvert[/meta]

Mit dieser Unit könnt ihr die Dateitypen BMP, PNG und JPG umwandeln. Ich habe die einzelnen Prozeduren und Funkionen noch einmal näher erläutert, darum werde ich hier nichts mehr erklären.

Hinweis: Erst die Unit im Anhang installieren (in den Lib-Pfad von Delphi), und dann ausprobieren

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
//-------------------------------------------------------------------------
//------------------------ Bildkonverter ----------------------------------
//-------------------------------------------------------------------------
//----------------------- (C) 2007 by Yogu --------------------------------
//-------------------------------------------------------------------------
//---- Konvertiert die Dateitypen BMP, PNG und JPG in BMP, PNG und JPG ----
//-------------------------------------------------------------------------

unit PictureConvert;

interface

//       Standart          BMP      PNG      JPG
uses SysUtils, Dialogs, Graphics, PNGImage, JPEG;

type  //Bildtyp  NIL     BMP    PNG    JPG
  TPictureType=(ptNone, ptBMP, ptPNG, ptJPG);

//Konvertiert eine Bilddatei 'Source' in die Datei 'Dest' mit dem
//Bilddateityp 'PictureType'. Wenn keine 'Dest'-Datei angegeben ist,
//wird die 'Source'-Datei mit der entsprechenden Endung genommen. Wenn
//kein Typ in 'Dest' angegeben ist, wird dieser entsprechend 'PictureType'
//angehängt.
procedure ConvertPicture(Source, Dest: String; PictureType: TPictureType);

//Lädt eine BMP-Datei und gibt diese als TBitmap zurück
function LoadBMPFromFile(const FileName: String): TBitmap;

//Lädt eine PNG-Datei und gibt diese als TBitmap zurück
function LoadPNGFromFile(const FileName: String): TBitmap;

//Lädt eine JPG-Datei und gibt diese als TBitmap zurück
function LoadJPGFromFile(const FileName: String): TBitmap;

//Speichert eine TBitmap als BMP
procedure SaveBMPToFile(Picture: TBitmap; FileName: String);

//Speichert eine TBitmap als PNG
procedure SavePNGToFile(Picture: TBitmap; FileName: String);

//Speichert eine TBitmap als JPG
procedure SaveJPGToFile(Picture: TBitmap; FileName: String);

implementation

procedure ConvertPicture(Source, Dest: String; PictureType: TPictureType);
var Ext: String; Picture: TBitmap;
begin
  //Fals Zieldatei '', Sourcedatei ohne Endung
  if Dest = '' then
    Dest := Copy(Source, 0, Length(Source)-Length(Ext));
  //Richtuge Endung hinzufügen, falls keine angegeben
  if ExtractFileExt(Dest) = '' then
  begin
    if PictureType = ptBMP then Dest := Dest + '.bmp';
    if PictureType = ptPNG then Dest := Dest + '.png';
    if PictureType = ptJPG then Dest := Dest + '.jpg';
  end;

  //Endung der Sorucedatei ermitteln
  Ext := LowerCase(ExtractFileExt(Source));
  //'jpeg' als 'jpg', weil das gleiche
  if Ext = '.jpeg' then Ext := '.jpg';
  //Bild erzeugen, falls keins geladen wird
  Picture := TBitmap.Create;

  //Richtigen Bildtyp laden
  if Ext = '.bmp' then Picture := LoadBMPFromFile(Source);
  if Ext = '.png' then Picture := LoadPNGFromFile(Source);
  if Ext = '.jpg' then Picture := LoadJPGFromFile(Source);

  //Als PictureType speichern
  if PictureType = ptBMP then SaveBMPToFile(Picture, Dest);     
  if PictureType = ptPNG then SavePNGToFile(Picture, Dest);
  if PictureType = ptJPG then SaveJPGToFile(Picture, Dest);
end;

function LoadBMPFromFile(const FileName: String): TBitmap;
begin
  //Bild erzeugen
  Result := TBitmap.Create;
  try
    //Bild laden, falls vorhanden
    Result.LoadFromFile(FileName);
  finally
  end;
end;

function LoadPNGFromFile(const FileName: String): TBitmap;
var PNG: TPNGObject;
begin
  //PNG und Bild erzeugen
  PNG := TPNGObject.Create;
  Result := TBitmap.Create;
  try
    //PNG laden, falls vorhanden
    PNG.LoadFromFile(FileName);
    //PNG Bild zuweisen
    Result.Assign(PNG);
  finally
    //PNG wieder freigeben
    PNG.Free;
  end;
end;

function LoadJPGFromFile(const FileName: String): TBitmap;
var JPG: TJPEGImage;
begin
  //JPG und Bild erzeugen
  JPG := TJPEGImage.Create;
  Result := TBitmap.Create;
  try
    //JPG laden, falls vorhanden
    JPG.LoadFromFile(FileName);
    //JPG Bild zuweisen
    Result.Assign(JPG);
  finally
    //JPG wieder löschen
    JPG.Free;
  end;
end;

procedure SaveBMPToFile(Picture: TBitmap; FileName: String);
begin
  try
    //Falls möglich, Bild speichern
    Picture.SaveToFile(FileName);
  finally
  end;
end;

procedure SavePNGToFile(Picture: TBitmap; FileName: String);
var PNG: TPNGObject;
begin
  //PNG erzeugen
  PNG := TPNGObject.Create;
  try
    //Bild PNG zuweisen
    PNG.Assign(Picture);
    //PNG speichern
    PNG.SaveToFile(FileName);
  finally
    //PNG wieder freigeben
    PNG.Free;
  end;
end;

procedure SaveJPGToFile(Picture: TBitmap; FileName: String);
var JPG: TJPEGImage;
begin
  //JPG erzeugen
  JPG := TJPEGImage.Create;
  try
    //Bild JPG zuweisen
    JPG.Assign(Picture);
    //JPG speichern
    JPG.SaveToFile(FileName);
  finally
    //JPG wieder freigeben
    JPG.Free;
  end;
end;

end.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: m1398
zakoon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60



BeitragVerfasst: Sa 08.11.08 17:51 
Hallo, ich würde gerne diese Unit benutzen, leider meldet mir Delphi 7 "PNGImage.dcu" nicht gefunden. Wo bekomme ich diese PNG-Unit? Oder kann ich etwas anderes verwenden?
Dankeschön!
Yogu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 09.11.08 15:19 
user profile iconzakoon hat folgendes geschrieben Zum zitierten Posting springen:
Hallo, ich würde gerne diese Unit benutzen

Es finden sich also doch immer noch Leute, die meine Units brauchen können. Auch wenn die schon über ein und halb Jahre alt sind. :D

user profile iconzakoon hat folgendes geschrieben Zum zitierten Posting springen:
Leider meldet mir Delphi 7 "PNGImage.dcu" nicht gefunden. Wo bekomme ich diese PNG-Unit?

Lade dir einfach das Archiv aus dem Anhang herunter und entpacke es in den Pfad "Lib" von Delphi. Oder du speicherst die Unit PNGImage (und vielleicht noch ein paar andere Dateien, musst du schauen, was benötigt wird) im Projekt-Verzeichnis.

Ich möchte jedoch noch anmerken, dass Borland (oder Codegear, weiß nicht mehr genau) die Rechte für diese Komponente in Anspruch genommen hat. Der Anhang stammt von der Zeit davor, ich hoffe mal, dass das noch ok ist.

user profile iconzakoon hat folgendes geschrieben Zum zitierten Posting springen:
Dankeschön!

Danke auch :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 09.11.08 15:56 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte jedoch noch anmerken, dass Borland (oder Codegear, weiß nicht mehr genau) die Rechte für diese Komponente in Anspruch genommen hat. Der Anhang stammt von der Zeit davor, ich hoffe mal, dass das noch ok ist.
Laut Lizenz ja, laut Nick Hodges nein, aber schließlich hast du es vorher gepostet.