Из библиотек посоветовал бы использовать GDI+ (сам ее раньше использовал), наиболее адекватная и востребованная в Delphi графическая библиотека. Скачать можно тут. Некоторые ругают GDI+ за некоторую медлительность при прорисовке больших объемов графики, но судя по вашей задаче, она вам подойдет, так как вам придется работать с небольшими по объему изображениями. В список модулей (uses) приписывайте три модуля GDIPAPI, GDIPOBJ, GDIPUTIL. Вот примеры кода:
Преобразование из bmp в jpg:
var
encoderClsid: TGUID;
Image: TGPImage;
begin
Image := TGPImage.Create(‘file.bmp’);
GetEncoderClsid(‘image/jpeg’, encoderClsid);
image.Save(‘file.jpg’, encoderClsid, nil);
image.Free;
end.
Преобразование из jpg в bmp:
var
encoderClsid: TGUID;
Image: TGPImage;
begin
Image := TGPImage.Create(‘file.jpg’);
GetEncoderClsid(‘image/bmp’, encoderClsid);
image.Save(‘file.bmp’, encoderClsid, nil);
image.Free;
end.
Изменение размера jpg файла с помощью Delphi.
var
in_img, out_img: TGPImage;
g: TGPGraphics;
out_width, out_height, cou: Integer;
sclx:extended;
fname:string;
encoderClsid: TGUID;
begin
try
fname:=’file.jpg’
out_width :=150;
out_height :=150;
in_img := TGPImage.Create(fname);
sclx:=out_width/in_img.GetWidth;
if sclx < 1 then
begin
out_height :=round(in_img.GetHeight*sclx);
out_img :=TGPBitmap.Create(out_width,out_height);
g := TGPGraphics.Create(out_img);
if in_img.GetWidth > in_img.getheight then
begin
g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height),
(in_img.GetWidth-in_img.getheight) div 2, 0, in_img.getheight, in_img.GetHeight, UnitPixel);
end else
g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height),
0, (in_img.getheight-in_img.GetWidth) div 2, in_img.GetWidth, in_img.GetWidth, UnitPixel);
g.Destroy;
in_img.Free;
GetEncoderClsid(‘image/jpeg’, encoderClsid);
out_img.Save(fname, encoderClsid);
out_img.free;
end;
except end;
end.
Для простого масштабирования нужно рассчитать размеры выходного файла и вместо:
if in_img.GetWidth > in_img.getheight then
begin
g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), (in_img.GetWidth-in_img.getheight) div 2, 0, in_img.getheight, in_img.GetHeight, UnitPixel);
end else
g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), 0, (in_img.getheight-in_img.GetWidth) div 2, in_img.GetWidth, in_img.GetWidth, UnitPixel);
будет достаточно
g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), 0, 0, in_img.GetWidth, in_img.GetHeight, UnitPixel);
Надеюсь это вам поможет для работы с изображениями. Специфики вашей программы я к сожалению не знаю, из вопроса непонятно, что именно должна делать программа.
Про то как загружать jpg файлы и настраивать их, я думаю вам это известно (это уже стандартный GDI). Если нет, напомню коротким примером:
var jpg:TJpegImage;
if opendialog1.execute then
image1.Picture.LoadFromFile(opendialog1.filename);
{создаем экземпляр объекта}
jpg:=TJpegImage.Create;
{присваиваем ему изображение}
jpg.Assign(image1.picture.graphic);
{устанавливаем степень сжатия (качество) 1..100}
jpg.CompressionQuality:=TrackBar1.Position;
{если установлен флаг "Оттенки серого", то пусть картинка будет серой:)}
jpg.Grayscale:=checkbox1.Checked;
{Упаковываем графику}
jpg.Compress;
{и сохраняем ее куда вам захочется}
jpg.SaveToFile('D:\first.jpg');
{уничтожаем экземпляр объекта}
jpg.free;
Удачи, в работе!