Autor Beitrag
Ehemaliges Mitglied
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.03.07 13:34 
Moderiert von user profile iconChristian S.: Bitte hier weitermachen


PictureConvert

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.
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Sa 24.03.07 14:34 
Hört sich erstmal nicht schlecht an.
Mal sehen, ob sie funktioniert und ich sie brauchen kann. ;)

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 24.03.07 15:45 
Da sind n paar Fehler drin (Alle in der Prozedur ConvertPicture):

  • Wenn dest leer ist, wird das Programm falsche Werte liefern
  • Du erzeugst Picture und weist dann ein anderes zu
  • Du gibst Picture nicht frei

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 25.03.07 20:02 
Da user profile iconYogu wieder seinen richtige Account nutzen kann, haben wir ihn gebeten, seine Unit unter diesem Account zu erstellen. Das ist hier zu finden.

Letztens gab es beim Zusammenführen von Threads einen Bug, den ich mir erst angucken will, daher bleiben diese Beiträge erst einmal hier.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.