Entwickler-Ecke

Multimedia / Grafik - BMP verkleinern


csigg - Mi 27.07.05 11:34
Titel: BMP verkleinern
Wie kann ich ein BMP bei annehmbarer Qualität verkleinern??
Hab hier im Forum und bei Google zwar viel gefunden, aber nicht was wirklich brauchbar war.


Gausi - Mi 27.07.05 11:38

Meinst du die Dateigröße kleiner machen, oder die Bildausmaße verkleinern (Breite/Höhe)?


-delphin- - Mi 27.07.05 11:38

mit Paint?


Stübi - Mi 27.07.05 11:43

Hallo

Versuchs mal mit Invan View oder Irnvan View einfach mal googeln. Ich weiss einfach nicht genau ob der auch bmp's unterstützt.

Gruss Stübi


Popov - Mi 27.07.05 12:04

Das ist keine OffTopic Frage, also muß er das Verkleinern mit Delphi meinen.


maxk - Mi 27.07.05 12:35


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure MachKlein(Bitmap:TBitmap;const NeueBreite, NeueHoehe: integer);
var TempBitmap:TBitmap;
begin
 TempBitmap:=TBitmap.Create;
 with TempBitmap do try
  Width:=NeueBreite;
  NeueHoehe:=NeueHoehe;
  Canvas.CopyMode:=srcCopy;
  Canvas.CopyRect(Rect(0,0,Width,Height), Bitmap.Canvas, Rect(0,0,Bitmap.Width,Bitmap.Height));
  Bitmap.Assign(TempBitmap);
 finally
  Free;
 end;
end;


Gruß,
maxk


mehmeh - Mi 27.07.05 12:40

ich denk mal es ist die Bildgröße gemeint

Vielleicht ginge es ja mit einem Image und der eigenschaft onStartDrag, dann könnte man die Größe vielleicht mit der Maus ändern. Oder nicht?


csigg - Mi 27.07.05 13:09

war ich so undeutlich ??*g*
Es geht drum dass ich in meinem Prog. JPEG´s einlese, verkleinere (physische Grösse und Speicherplatz) und dann speichere zum Weiterverarbeiten.


Popov - Mi 27.07.05 13:11

user profile iconcsigg hat folgendes geschrieben:
war ich so undeutlich ??*g*

Es geht drum dass ich in meinem Prog. JPEG´s einlese,


Eigentlich ja

user profile iconcsigg hat folgendes geschrieben:
Wie kann ich ein BMP bei annehmbarer Qualität verkleinern??


csigg - Mi 27.07.05 13:21

Das war ja nur zur erklärung der Situation.

In einem vorigen Thread hab ich mir erklären lassen dass ich das bmp leichter bearbeiten kann. Drum wird bei mir das JPEG erst als BMP umgewandelt


Blackheart666 - Mi 27.07.05 13:34

Liest Du Dir auch deine vorigen Threads Durch ?!


csigg - Mi 27.07.05 16:26

Ja, hab aber nix gefunden, ws einigermassen brauchbare ergebnisse liefert.
Und mit Antworten "such mal" komm ich auch nciht weiter, siehe Anfang Topic


Heiko - Mi 27.07.05 16:37

Verusche es mal mit der GDI-Funktion StretchDraw (Unit Windows).


Keldorn - Mi 27.07.05 18:22
Titel: Re: BMP verkleinern
user profile iconcsigg hat folgendes geschrieben:
Wie kann ich ein BMP bei annehmbarer Qualität verkleinern??
Hab hier im Forum und bei Google zwar viel gefunden, aber nicht was wirklich brauchbar war.


glaub ich dir nicht. Dazu gab es schon oft Beiträge. gugg nach Suche in: Delphi-Forum, Delphi-Library INTERPOLATION, in den opensource-sparten ist auch ein Beispiel für eine lineare Interpolation von Andreas Pfau, für einfache Verkleinerungen (bis ca. 70% der originalgröße ist das auch völlig ok). für stärke Verkleinerungen liefern bikubische oder Lanczos3-Algos bessere Resultate.
Achso: wenn du nach interpolation suchst, wirst du oft auf die graphics32-lib verwiesen. (http://www.g32.org), diese hat bereits die obengenannten Algos implementiert, dort gibt es auch ein Demo, was sich mit dem Resampling beschäftigt.

Mfg Frank


F34r0fTh3D4rk - Mi 27.07.05 18:34

user profile iconmaxk hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure MachKlein(Bitmap:TBitmap;const NeueBreite, NeueHoehe: integer);
var TempBitmap:TBitmap;
begin
 TempBitmap:=TBitmap.Create;
 with TempBitmap do try
  Width:=NeueBreite;
  NeueHoehe:=NeueHoehe;
  Canvas.CopyMode:=srcCopy;
  Canvas.CopyRect(Rect(0,0,Width,Height), Bitmap.Canvas, Rect(0,0,Bitmap.Width,Bitmap.Height));
  Bitmap.Assign(TempBitmap);
 finally
  Free;
 end;
end;


Gruß,
maxk

habs etwas korrigiert und stretchdraw anstatt CopyRect genommen, mit bitblt hab ichs nicht hinbekommen, so funzt es, aber die qualität ist zum kotzen :puke: :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure SizeBMP(Bitmap: TBitmap; const NewWidth, NewHeight: integer);
var
  TempBMP: TBitmap;
  Rect: TRect;
begin
  TempBMP := TBitmap.Create;
  with TempBMP do
    try
      Width := NewWidth;
      Height := NewHeight;
      Rect.Left := 0;
      Rect.Top := 0;
      Rect.Right := width;
      Rect.Bottom := Height;
      TempBMP.Canvas.StretchDraw(Rect, Bitmap);
      Bitmap.Assign(TempBMP);
    finally
      Free;
    end;
end;


MFG

F34r0fTh3D4rk ;)