Chciałem zrobić programik w którym porównał bym sobie tylko jak wygląda jpg o określonym stropniu kompresji.
Dałem na forme TrackBar z zakresem 1-100 i dwa image'y. jeden nie Visible i zawierający próbkę obrazja, drugi pusty z visible=true
Dałem o OnChange Trackbara taką prockę:
(user Jpeg)
procedure costam(Sender blah blah blah);
var jpg:TJpegImage;
begin
jpg:=TJpegImage.Create;
jpg.Assign(Image1.Picture.Graphic.Bitmap);
jpg.CompressionQuality:=Trackbar1.Position;
Image2.Picture.Graphic.Bitmap.Assign(jpg);
jpg.Free;
end;
lub alternatywnie:
procedure costam(Sender blah blah blah);
var jpg:TJpegImage;
bmp:TBitmap;
begin
jpg:=TJpegImage.Create;
jpg.Assign(Image1.Picture.Graphic.Bitmap);
jpg.CompressionQuality:=Trackbar1.Position;
bmp:=TBitmap.Create;
bmp.Assign(jpg);
Image2.Picture.Graphic.Bitmap.Assign(bmp);
bmp.Free;
jpg.Free;
end;
i procedury działają ... ale źle :( zawsze w Image2 pokazuje mi się obrazek o najwyższej jakości, niezależnie co zaznaczę na Trackbarze ...
natomiast kiedy robię tak:
procedure costam(Sender blah blah blah);
var jpg:TJpegImage;
bmp:TBitmap;
begin
jpg:=TJpegImage.Create;
jpg.Assign(Image1.Picture.Graphic.Bitmap);
jpg.CompressionQuality:=Trackbar1.Position;
bmp:=TBitmap.Create;
bmp.Assign(jpg);
bmp.SaveToFile('c:\test.bmp');
bmp.Free;
Image2.Picture.LoadFromFile('c:\test.bmp');
jpg.Free;
end;
to procedura działa, tylko trwa troche dłużej i jest to trochę bez sensu żeby zapisywać na dysk żeby to zobaczyć. Trochę dziwne ale zwracam się do was o pomoc.