[delphi] jpg verkleinen

Pagina: 1
Acties:

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 19-06 09:25

Tom-my

w03iz0rz

Topicstarter
Wat ik wil doen is een jpg van bijv 1600x1200 verkleinen naar 100x100 met de juiste proporties.

dit is de code:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button2Click(Sender: TObject);
var
 bmp : Timage;
  img:TJpegImage;
  TempBmp:TBitmap;
begin
 try
 img:= TJpegImage.create;
 img.LoadFromFile('D:\achtergrond\test\linux_001.jpg');
 TempBmp:=Tbitmap.create;
 with TempBmp do
 begin
   height:=img.Height;
   Width:=img.width;
   assign(img);
   Canvas.DrawFocusRect(rect (0,0,tempbmp.width,tempbmp.Height));
 end;
 bmp := Timage.create(self);
 bmp.width := 100;
 bmp.Height := 100;
 bmp.Stretch := True;
 bmp.Proportional := True;
 bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,Tempbmp.Canvas,rect(0,0,tempbmp.width,tempbmp.Height));
 bmp.Picture.SaveToFile('D:\achtergrond\test\testlinux_001.bmp');
finally
 tempbmp.free;
 bmp.free;
 img.free;
 end;

end;



Het werkt wel, maar de bmp die eruit komt is a. niet goed omdat ik een jpg eruit wil hebben (om de simpele reden dat een jpg veel kleiner is dan een bmp) en b. hij verminkt de kleuren in het kleine filetje.

Wat moet ik nu doen om dit voor elkaar te krijgen zonder eerst nog een procedure te maken die een bmp als jpg saved? en die kleuren?

"Then there was the man who drowned crossing a stream with an average depth of six inches."


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En wat is er mis met
bmp.Picture.SaveToFile('D:\achtergrond\test\testlinux_001.JPG');

We adore chaos because we like to restore order - M.C. Escher


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 07:18

Tomatoman

Fulltime prutser

Zie dit topic over het werken met JPEG's. Vergeet niet JPEG aan je uses clausule toe te voegen.

Een goede grap mag vrienden kosten.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En anders kan je gewoon img weer gebruiken om de bmp aan te assignen en dan te bewaren. Dat zijn 4 regels extra.

http://www.efg2.com/Lab/Graphics/BMPJPG.htm
http://www.efg2.com/Lab/Library/UseNet/2000/0920a.txt

We adore chaos because we like to restore order - M.C. Escher


  • Tom-my
  • Registratie: November 2000
  • Laatst online: 19-06 09:25

Tom-my

w03iz0rz

Topicstarter
Het gaat op zich niet om het saven van jpeg naar bmp, das niet zo'n punt, het gaat me puur om ook het verkleinen erin te krijgen, en dat red je niet met bmp.picture.savetofile('');

Als k dat wel gebruikt gaat het prima, maar dan is mn plaatje nog 1600x1200 en dat schiet niet op. Ik wil hem op ongeveer 100 in de breedte, en ook dat lukt nu wel, maar de kleuren zijn dan niet goed, ik zal strax ff 2 pics uploaden om het verschil te laten zien.

"Then there was the man who drowned crossing a stream with an average depth of six inches."


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Voor het verkleinen zou je eens kunnen kijken naar canvas.stretchdraw. Dit tekent een graphic op het canvas geschaald naar de grote van het canvas.
En als je i.p.v. de TBitMap een TJegImage gebruikt ben je zeer waarschijnlijk ook van je kleurverschil af.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

FanToom schreef op 20 oktober 2002 @ 20:54:
Het gaat op zich niet om het saven van jpeg naar bmp, das niet zo'n punt
Nou, dat kwam bij mij zo niet over:
Het werkt wel, maar de bmp die eruit komt is a. niet goed omdat ik een jpg eruit wil hebben
Wat moet ik nu doen om dit voor elkaar te krijgen zonder eerst nog een procedure te maken die een bmp als jpg saved? en die kleuren?
Maargoed, ik vergeef het je :p

We adore chaos because we like to restore order - M.C. Escher


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Creepy schreef op 20 oktober 2002 @ 21:09:
Voor het verkleinen zou je eens kunnen kijken naar canvas.stretchdraw. Dit tekent een graphic op het canvas geschaald naar de grote van het canvas.
En als je i.p.v. de TBitMap een TJegImage gebruikt ben je zeer waarschijnlijk ook van je kleurverschil af.
Maar daar wordt het oerlelijk van!! Waarom niet ff zelf een functie schrijven die keurig lineair verkleint?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Oerlelijk?? Het is geen slimme PhotoShop resize nee, maar om het nou oerlelijk te noemen. En als je zelf een rechttoe-rechtaan lineaire resize schrijft zal je zien dat ie nagenoeg hetzelfde resultaat geeft als de stretchdraw aangezien deze ook lineair resized.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Creepy schreef op 21 oktober 2002 @ 08:26:
Oerlelijk?? Het is geen slimme PhotoShop resize nee, maar om het nou oerlelijk te noemen. En als je zelf een rechttoe-rechtaan lineaire resize schrijft zal je zien dat ie nagenoeg hetzelfde resultaat geeft als de stretchdraw aangezien deze ook lineair resized.
Euh... oh... Ik dacht toch echt dat StretchDraw gewoon pixels kopieerde, dus gewoon op de pixel-resize manier.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

GerbenW schreef op 21 oktober 2002 @ 08:56:
[...]

Euh... oh... Ik dacht toch echt dat StretchDraw gewoon pixels kopieerde, dus gewoon op de pixel-resize manier.
Dat doet ie per regel, met als effect dat als je flink vergroot je mooie pixels krijgt, of dat er lijnen wegvallen als je verkleint :)
Als je dat wilt voorkomen zul je er een soort vector georienteerd iets van moeten maken met als extra dat je een algoritme moet hebben om een willekeurig plaatje om te zetten naar vectoren. Als je eenmaal je vectoren hebt kun je blijven resizen wat je wilt.

Ik heb het idee dat jij wat anders bedoelt met lineair verkleinen dan ik?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Ja dat heb ik idd... Onder lineair verkleinen bedoel ik: kijken welke pixels van het oorspronkelijke plaatje allemaal in 1 pixel vallen van het nieuwe plaatje en daar het gemiddelde van nemen.

Als je dus een plaatje hebt van 18x13 wat naar 5x5 moet worden verkleind neem je dus voor de pixel linksboven het gemiddelde van de eerste 3,6 (18/5) pixels in de breedte en 2,6 (13/5) pixels in de hoogte. Etc. Hmm... Of was dat nou bi-cubic? :?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

ah zo... dat doet Delphi in elk geval niet nee.. heet dat niet bilineair? Nah ja.. tzal best. Delphi doet dat in elk geval niet ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Tja volgens mij is dat de beste manier om te verkleinen...

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1