AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Image resizer

Offene Frage von "dangerduck"
Ein Thema von dangerduck · begonnen am 20. Dez 2008 · letzter Beitrag vom 21. Dez 2008
Antwort Antwort
dangerduck

Registriert seit: 14. Dez 2008
39 Beiträge
 
#1

Image resizer

  Alt 20. Dez 2008, 19:46
I have an program which must to resizing image from 3200 X 1290 to 800 x 600 pixels but i dont now how to format is jpeg
i try to take two Timage (one for showing another one for stretching )but it's don't work well...
can someone tell me please how to resize it faster with delphi ?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Image resizer

  Alt 20. Dez 2008, 20:25
See MSDN-Library durchsuchenStretchBlt
Zitat:
BOOL StretchBlt(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
DWORD dwRop // raster operation code
);
HDC <=> Canvas.Handle

dwRop: SRCCOPY

If the Qualtity is bad, try
Code:
int SetStretchBltMode(Canvas.Handle, HALFTONE;
  Mit Zitat antworten Zitat
Douglas Quintaine
(Gast)

n/a Beiträge
 
#3

Re: Image resizer

  Alt 21. Dez 2008, 08:23
Delphi-Quellcode:
procedure CopyImagePart(const src: TGraphic; const dest: TBitmap; aWidth, aHeight: Integer);
var
  tempBMP: TBitmap;
begin
  tempBMP := TBitmap.Create;
  try
    tempBMP.Width := src.Width;
    tempBMP.Height := src.Height;
    tempBMP.Assign(src);
    dest.Width := aWidth;
    dest.Height := aHeight;
    BitBlt(dest.Canvas.Handle,0,0,aWidth,aHeight,tempBMP.Canvas.Handle,0,0,SRCCOPY);
  finally
    tempBMP.Free;
  end;
end;

procedure ReSizeJPGImage(url: String; x,y: Integer);
var
 aCopy: TBitmap;
 JPG: TJPEGImage;
begin
  JPG := TJPEGImage.Create;
   try
     aCopy := TBitmap.Create;
     try
       JPG.LoadFromFile(url);
       CopyImagePart(JPG,aCopy,x,y);
       aCopy.SaveToFile(url);
     finally
       aCopy.Free;
     end;
   finally
     JPG.Free;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ReSizeJPGImage(edit1.Text, 260,30); // (url, x, y)
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Image resizer

  Alt 21. Dez 2008, 11:11
Here' s a procedure I wrote for a similar task. It converts a TGraphic into a TJPEGImage proportionally. For this you have to add the "jpeg"-unit to your uses-clause.
Delphi-Quellcode:
procedure StretchGraphic(const src: TGraphic; //the TGraphic to convert
                         const dest: TJPEGImage; //the TJPEGImage which receives the converted graphic
                         const DestWidth, DestHeight: integer); //maximum width and height of the destination jpeg
var temp, aCopy: TBitmap;
    faktor: double;
begin
  if src.Width > DestWidth then
    begin
      faktor := DestWidth / src.Width;
      if (src.Height * faktor) > DestHeight then
        faktor := DestHeight / src.Height;
    end
  else
    begin
      faktor := DestHeight / src.Height;
      if (src.Width * faktor) > DestWidth then
        faktor := DestWidth / src.Width;
    end;
  aCopy := TBitmap.Create;
  try
    aCopy.PixelFormat := pf24Bit;
    aCopy.Assign(src);
    temp := TBitmap.Create;
    try
      temp.Width := round(src.Width * faktor);
      temp.Height := round(src.Height * faktor);
      try
        SetStretchBltMode(temp.Canvas.Handle,HALFTONE);
        StretchBlt(temp.Canvas.Handle,
                   0,0,temp.Width,temp.Height,
                   aCopy.Canvas.Handle,
                   0,0,aCopy.Width,aCopy.Height,
                   SRCCOPY);
        dest.Assign(temp);
      except
        on E: Exception do
          MessageBox(0,PAnsiChar(E.Message),nil,MB_OK or MB_ICONERROR);
      end;
    finally
      temp.Free;
    end;
  finally
    aCopy.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dangerduck

Registriert seit: 14. Dez 2008
39 Beiträge
 
#5

Re: Image resizer

  Alt 21. Dez 2008, 12:26
thanks to all
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 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