Avatar billede futterama Nybegynder
14. december 2004 - 09:53 Der er 8 kommentarer og
1 løsning

Gemme udsnit af JPG billede i TImage

Hej,

Der står jo en hel masse om billeder her på eksperten, men jeg kan ikke finde lige netop det jeg skal bruge.

Jeg har en TImage som indeholder et JPG-billede, og af dette vil jeg gerne gemme et udsnit.
Jeg kender koordinatorne for udsnittet - men mangler koden til hvordan jeg gemmer udsnittet.
Udsnittet skal gemmes som jpg-fil selvfølgelig ;-)
Avatar billede pellelil Nybegynder
14. december 2004 - 10:06 #1
På "efg's Computer Lab" kan du finde algoritmer/beskrivelse til en lang række ting, heribland en sektion om billeder (jeg vil tro at du der kan finde det du søger):

http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/ImageProcessing.htm
Avatar billede futterama Nybegynder
14. december 2004 - 11:42 #2
Du burde ikke få alle pointene da du ikke linkede til noget konkret, men det hjalp mig da på vej ;-)

Jeg kan klippe i en TBitmap nu, men der er intet der hedder Canvas i en TJpegImage, så koden virker ikke umiddelbart til JPG filer... men måske man skal convertere før man klipper?
Avatar billede pellelil Nybegynder
14. december 2004 - 11:59 #3
Så lad os sige at jeg fik 30 point for linket, og de sidste 30 point for den "opdragende effekt" det havde at du selv kunne finde helt konkret det du havde brug for  ;-)
Avatar billede futterama Nybegynder
14. december 2004 - 12:02 #4
Så har jeg fundet ud af det, og vil lige poste noget kode her:

  public
    { Public declarations }
    LoadedImage, SaveImageBMP: TBitmap;
    SaveImageJPG: TJpegImage;

procedure TForm1.FormActivate(Sender: TObject);
begin
  LoadedImage := TBitmap.Create; //Opretter billederne
  SaveImageBMP := TBitmap.Create;
  SaveImageJPG := TJpegImage.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then //Åbn et billede
  begin
    LoadedImage.LoadFromFile(OpenPictureDialog1.FileName); //Indlæs billede fra fil
    LoadedImage.PixelFormat := pf24Bit; //Sæt PixelFormat til 24 bit
    Image1.Picture.Graphic := LoadedImage; //Vis det indlæste billede på formen
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SaveImageBMP.Width  := 65; //Billedet der gemmes bliver 65 pixel bred
  SaveImageBMP.Height := 65; //Billedet der gemmes bliver 65 pixel høj
  SaveImageBMP.Canvas.CopyRect(Rect(0, 0, SaveImageBMP.width, SaveImageBMP.Height), LoadedImage.Canvas, Rect(0, 0, 65, 65)); //Kopier området fra 0,0 til 65,65
  SaveImageBMP.SaveToFile('d:\test.bmp'); //Gem BMP-filen
  SaveImageJPG.Assign(SaveImageBMP); //"Konverter" fra BMP til JPG
  SaveImageJPG.CompressionQuality := StrToInt(Edit1.Text); //Sæt kompressionskvalitet
  SaveImageJPG.Compress; //Tving komprimering
  SaveImageJPG.SaveToFile('d:\test.jpg'); //Gem som JPG-fil
end;


Ja far, jeg skal nok huske det til næste gang ;-)

Så smid da det svar så du kan få dine point :-p
Avatar billede futterama Nybegynder
14. december 2004 - 12:03 #5
ups, jeg glemte lige at der skal være:

uses
  JPEG;

Ellers virker det ikke ;-)
Avatar billede futterama Nybegynder
14. december 2004 - 12:08 #6
Ej sjok, jeg har lige fundet ud af at hvis man skal indlæse et JPG-billede, klippe i det (crop hedder det på engelsk) og gemme det igen, så skal det efter det er indlæst, "konverteres" til BMP, kopiere det man vil klippe ud til en anden BMP og til sidst konverteres til JPG og gemmes. Puha. Dvs. der skal være 2 TBitmap og 2 TJpegImage hvis jeg har ret.
Avatar billede pellelil Nybegynder
14. december 2004 - 12:23 #7
Måske GraphicEx kan gøre det lidt nemmere !?:

http://www.soft-gems.net/Graphics.php#GraphicEx
Avatar billede futterama Nybegynder
14. december 2004 - 12:25 #8
Det tror jeg ikke:

"This library is primarily designed to load images as background (buttons, forms, toolbars) and textures (DirectX, OpenGL) or for image browsing and editing purposes as long as you don't need to save images."

Og jeg har jo netop brug for at gemme billedet ;-)
Avatar billede pellelil Nybegynder
14. december 2004 - 12:38 #9
Ja deri har du da ganske ret (ser jeg nu), jeg har tidliger brugt den i forbindlese med load af billeder. pt. bruger jeg et Library der LEADTOOLS det kan alt med hensyn til billeder men det koster en bundegård (and then some)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester