Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi wie ändere ich die Abmessungen eines Bildes? (https://www.delphipraxis.net/12990-wie-aendere-ich-die-abmessungen-eines-bildes.html)

iaby 8. Dez 2003 18:41


wie ändere ich die Abmessungen eines Bildes?
 
ich weiß, das wurde schon tausendmal diskutiert, aber ich hab einfach nix passendes gefunden. es wird zwar immer die paintbox empfohlen, aber ich bekomme damit einfach nix hin!

deshalb meine bitte:
hat jemand eine geeignete prozedure parat, die mir die größe eines bildes (C:\bild.bmp) verändert, und anschliessend speichert (c:\neuesbild.bmp)? oder zumindest die passenden procedures und functions der paintbox? ich scheitere schon beim laden eines bitmaps in die paintbox (habs über eine TBitmap probiert, aber dann bekomm ich das bild später nicht gespeichert).
das bild soll dann, egal wie groß es vorher war, abmessungen von 800x600 haben (proportional braucht es nicht zu sein!)

kann mir jemand helfen?

danke schonmals im voraus,
iaby

himitsu 8. Dez 2003 20:13

Re: wie ändere ich die Abmessungen eines Bildes?
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

einfach mal aus dem Bauch heraus, würde es so geh'n.

StretchDraw ist zwar nicht die beste Art ein Bild zu bearbeiten, da das Bild nicht geglättet wird. Es ist aber in TBitMap schon eingebaut.
Wenn doch noch eine Glättung benötigt wird, findest du mit Sicherheit etwas hier im Forum. ()

Delphi-Quellcode:
Procedure ZoomBitMap(Filename: String);
  Var BM: TBitMap;
    {X, Y: Integer;}

  Begin
    BM := TBitMap.Create;
    BM.LoadFromFile(Filename);
    {X := BM.Width;}
    {Y := BM.Height;}
    If BM.Width < 800 Then BM.Width := 800;
    If BM.Height < 600 Then BM.Height := 600;

    (* Größe des BitMap's ändern:              *
     * (0, 0, X - 1, Y - 1) => (0, 0, 799, 599) *)
    BM.Canvas.StretchDraw(Rect(0, 0, 799, 599), BM);

    If BM.Width > 800 Then BM.Width := 800;
    If BM.Height > 600 Then BM.Height := 600;
    BM.SaveToFile(Filename);
    BM.Free;
  End;
(X & Y wind für StretchDraw nicht benötigt)

PS: ich habs noch nicht getestet, es sollte aber funktionieren

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

OLLI_T 8. Dez 2003 22:08

Re: wie ändere ich die Abmessungen eines Bildes?
 
Ein Hallo an Wolke 7!

Zitat:

StretchDraw ist zwar nicht die beste Art ein Bild zu bearbeiten, da das Bild nicht geglättet wird
Ein munteres SetStretchBltMode auf den Ziel Device Kontext abgefeuert wirkt gar wahre Wunder:

Delphi-Quellcode:
...
SetStretchBltMode(BM.Canvas.Handle,STRETCH_HALFTONE);
BM.Canvas.StretchDraw(Rect(0, 0, 799, 599), BM);
...
Viele Grüsse

OLLI

Gandalfus 9. Dez 2003 12:57

Re: wie ändere ich die Abmessungen eines Bildes?
 
laden und grösse anpassen und anzeigen in einer Paintbox.
Delphi-Quellcode:
var
  Backbild: Tbitmap;
  orginalbild: Tbitmap;

IF Opendialog1.execute then
begin
  orginalbild := TBitmap.create;
  orginalbild.loadfromfile(Opendialog1.filename);
  Paintbox1.width := 800;
  Paintbox1.heught := 600;
  Backbild:= TBitmap.create;
  Backbild.width := 800;
  Backbild.height := 600;
  Backbild.Canvas.StretchDraw(Rect(0, 0, Backbild.width , Backbild.height), orginalbild);
  Paintbox1.canvas.draw(0,0,Backbild);
end;
Speichern:
Delphi-Quellcode:
Backbild.savetofile(c:\neuesbild.bmp)
im destruktor wieder freigeben:
Delphi-Quellcode:
Backbild.free;
orginalbild.free;
mfg

iaby 9. Dez 2003 15:46

Re: wie ändere ich die Abmessungen eines Bildes?
 
ein grosses DANKE mal an alle!

@himitsu:
zum verkleinern klappt das echt super, aber wenn ichs vergrößern will hab ein prob:
methode 1)
ich setze die größe des bildes gleich auf 800x600 und komme dann mit stretchdraw, dann habe ich aber nur das bild in originalgröße in der linken oberen ecke! (was ja auch logisch ist)
methode 2)
ich setzte die größe des bildes nach stretchdraw, aber dann ist mein bild abgeschnitten und ein kleiner teil des bildes ist dann 800x600 (was ja auch wieder logisch ist!)

wie mache ich es jetzt, dass ich ein bild vergrößern kann?
am besten wäre es, wenn dazu kein weiteres TBitmap verwendet werden müsste!

gruss,
iaby

himitsu 9. Dez 2003 16:18

Re: wie ändere ich die Abmessungen eines Bildes?
 
Uups, Stimmt ja.

Dann halt doch BitMaps:
Delphi-Quellcode:
Procedure ZoomBitMap(Filename: String);
  Var BM, BM2: TBitMap;

  Begin
    BM := TBitMap.Create;
    BM.LoadFromFile(Filename);
    BM2 := TBitMap.Create;
    BM2.Width := 800;
    BM2.Height := 600;
    BM2.PixelFormat := BM.PixelFormat;
    (* Größe des BitMap's ändern *)
    BM2.Canvas.StretchDraw(Rect(0, 0, 799, 599), BM);
    BM2.SaveToFile(Filename);
    BM2.Free;
    BM.Free;
  End;
(es gibt zwar noch 'ne Möglichkeit es doch mit nur einem BitMap zu machen, da ist aber das hier einfacher)

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Gandalfus 9. Dez 2003 17:13

Re: wie ändere ich die Abmessungen eines Bildes?
 
das kommt mir doch irgendwie bekannt vor.

iaby 10. Dez 2003 10:39

Re: wie ändere ich die Abmessungen eines Bildes?
 
danke, funzt wunderbar!

gruss,
iaby

fabi65 16. Sep 2005 13:38

Re: wie ändere ich die Abmessungen eines Bildes?
 
hi, wie kann ich jetzt jpg´s kleiner machen? mit bmp klappt das 1a :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz