TImage / TBitmap
Laden uns speichern von Bitmaps
|
Image1.Picture.LoadFromFile('C:\bild.bmp');
// Bild laden |
|
Image1.Picture.SaveToFile('C:\bild.bmp');
// Bild speichern |
Bild löschen
|
Image1.Picture :=
nil;
// Bild löschen |
Zuweisen eines TBitmaps (var
Bild:
TBitmap;)
|
Bild:=TBitmap.create;
try
Bild.LoadFromFile('C:\bild.bmp');
// lädt das Bitmap Bild ins TBitmap Bild
finally
Image1.Picture.Assign(Bild); // hier
wird das Bitmap (Inhalt von TBitmap) zugewiesen
Bild.Free;
end; |
Bild verkleinern bzw, vergrößern
Um die Größe
eines Bitmap
zu ändern (Resizen) gibt es die Methode Canvas.StretchDraw,
jedoch liefert diese nur ein bescheidenes Ergebnis. Das Bild ist
ziemlich verpixelt. Wesentlich bessere Ergebnisse bekommt man
mit der Methode "Stretch", der Grafikbibliothek GraphicEX. Diese
kann
hier heruntergeladen werden. GraphicEx muss nicht zwingend
als Komponente installiert werden, es reicht die Angabe zur
GraphicEx.pas. Mehr Infos zum Installieren einer Komponente gibt
es
hier.
|
Stretch(75,
50, sfLanczos3,
0, Image1.Picture.Bitmap);
// benötigt GraphicEx in Uses ! |
Neben der
Resemblermethode Lanczos3, stehen noch weitere Methoden zur
Verfügung (sfBox, sfTriangle, sfHermite, sfBell, sfSpline, und
sfMitchell), jedoch liefert Lanczos3 die besten Ergebnisse,
wobei diese auch die langsamste Methode ist.
Hier mal ein
Unterschied von StretchDraw zu GraphicEx Stretch mit Lanczos3
Resemblermethode:
Original Größe |
StrechDraw |
GraphicEx
Stretch -
sfLanczos3 |
|
|
|
|
|
|
Bild in Graustufen umwandeln
|
procedure
GrayScale(C:TCanvas);
var x, y: integer;
Color: LongInt;
R, G, B, Gr: Byte;
begin
with C
do begin
for x:= ClipRect.Left
to ClipRect.Right
do
for y:= ClipRect.Top
to ClipRect.bottom
do
begin
Color := ColorToRGB(Pixels[x,Y]);
R := GetRValue(Color);
G := GetGValue(Color);
B := GetBValue(Color);
Gr:= Trunc(B*0.11+G*0.59+R*0.3);
Pixels[x,Y] := RGB(Gr, Gr, Gr);
end;
end;
end; |
Angewendet wird das ganze auf das
Canves:
|
image1.Picture.bitmap.PixelFormat :=
pf24bit;
GrayScale(Image1.Picture.Bitmap.Canvas); |
Helligkeit ändern
|
procedure Helligkeit(Bitmap,
// Zielbitmap
Original : TBitmap;
// Quellbitmap - Ziel und Quelle kann
gleich sein
Value : integer);
// Wert zw -240 ... + 240
var x,y : integer;
Ziel : ^TRGBTriple;
Quelle : ^TRGBTriple;
n : byte;
ar : array[0..255]
of byte;
begin
n := abs(value);
if value >
0 then
for x :=
0 to
255 do if
integer(x + n) > 255
then ar[x] :=
255 else
ar[x] := x + n
else
for x := 0
to 255
do if integer(x - n) <
0 then
ar[x] := 0
else ar[x] := x - n;
for y :=
0 to
Bitmap.Height-1
do begin
Ziel := Bitmap.Scanline[y];
Quelle := Original.Scanline[y];
for x :=
0 to
(Bitmap.Width-1) do begin
Ziel^.rgbtBlue := ar[Quelle^.rgbtBlue];
Ziel^.rgbtred := ar[Quelle^.rgbtred];
Ziel^.rgbtGreen := ar[Quelle^.rgbtGreen];
inc(Ziel);
inc(quelle);
end;
end;
end;
|
Quelle:
http://www.delphipraxis.net |
Aufgerufen wir die Prozedur so:
|
image1.Picture.bitmap.PixelFormat :=
pf24bit;
Helligkeit(image1.picture.bitmap, image1.picture.bitmap,
50);
image1.repaint |
Animierte Gif's in TImage (ab D2007)
|
GIFImageDefaultAnimate := True;
// Benötigt GIFImg in Uses.
Image1.Picture.LoadFromFile('C:\image.gif'); |
Möchte man
ein animiertes Gif aus der Resource laden:
|
var
TempGif: TGifImage;
ResStream: TResourceStream;
.
.
.
GIFImageDefaultAnimate := True;
try
ResStream := TResourceStream.Create(HInstance,
'image', RT_RCDATA);
TempGif := TGifImage.Create;
TempGif.LoadFromStream(ResStream);
Image1.Picture.Assign(TempGif);
finally
FreeAndNil(ResStream);
FreeAndNil(TempGif);
end; |
|