Конвертирование JPEG в BMP и обратно в Delphi

Дата публикации: 14-05-2011 | Автор: MelfisFettel | Рубрика: Delphi

Конвертирование JPEG в BMP и обратно в DelphiСегодня мы напишем программу для конвертирования файлов JPEG в BMP и наоборот. Для начала рассмотрим что есть JPEG. JPEG (правильно произносится «джейпег» Joint Photographic Experts Group, по названию организации-разработчика) — один из популярных графических форматов, применяемый для хранения фотоизображений и подобных им изображений. Файлы, содержащие данные JPEG, обычно имеют расширения .jpeg, .jfif, .jpg, .JPG, или .JPE. Однако из них .jpg самое популярное расширение на всех платформах. MIME-типом является image/jpeg. Алгоритм JPEG в наибольшей степени пригоден для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет.
И BMP. BMP (Bitmap Picture) формат хранения растровых изображений. С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2. Файлы формата BMP могут иметь расширения .bmp, .dib и .rle. Кроме того, данные этого формата включаются в двоичные файлы ресурсов RES и в PE-файлы. Глубина цвета в данном формате может быть 1, 2, 4, 8, 16, 24, 32, 48 бит на пиксел, максимальные размеры изображения 65535×65535 пикселов.
Создадим новый проект Forms Application и добавим следующие компоненты на нашу форму:

OpenDialog
С его помощью мы будем выбирать файл для конвертирования.

SaveDialog
Соответственно сохранять сконвертированный файл.

RadioGroup
В свойстве Items добавим две строки «JPEG To BMP» и «BMP To JPEG». Более ничего от него не понадобится кроме как указывать оператору IF какую именно процедуру выполнять.

LabeledEdit.
Две штуки. У одного в свойстве EditLabel->Caption напишем «Исходный файл», а у другого «Конечный файл».

Для LabeledEdit1 напишем вот такой код в обработчике события OnClick следующий код:

1
2
3
4
5
6
7
procedure TForm1.LabeledEdit1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    LabeledEdit1.Text:=OpenDialog1.FileName
   else
    exit;
end;
procedure TForm1.LabeledEdit1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    LabeledEdit1.Text:=OpenDialog1.FileName
   else
    exit;
end;

Для OnClick Labeled2 вызов диалога сохранения:

1
2
3
4
5
6
7
procedure TForm1.LabeledEdit2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
    LabeledEdit2.Text:=SaveDialog1.FileName
   else
    exit;
end;
procedure TForm1.LabeledEdit2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
    LabeledEdit2.Text:=SaveDialog1.FileName
   else
    exit;
end;

И добавим одну кнопочку Button. При нажатии на которую произойдет конвертация. Но о ее обработчике чуть позже. Вот такая форма получилась у меня:

Форма Convert JPEG в BMP

Подключим в модуль Usues модуль Jpeg.

1
2
3
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,  Jpeg;
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,  Jpeg;

И добавим в две наши процедуры:

1
2
3
4
5
6
7
8
9
type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    SaveDialog1: TSaveDialog;
    ...........................
    ...........................   
    procedure BMP_To_JPEG();
    procedure JPEG_To_BMP();
type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    SaveDialog1: TSaveDialog;
    ...........................
    ...........................   
    procedure BMP_To_JPEG();
    procedure JPEG_To_BMP();

Теперь напишем эти две процедуры в нашем коде:

BMP в JPEG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Процедура конветирования BMP в JPEG
procedure TForm1.BMP_To_JPEG();
var
 jpg:TJPEGImage;
 bmp:TBitmap;
begin
   try
    jpg:=TJPEGImage.Create;
    bmp:=TBitmap.Create;
    bmp.LoadFromFile(LabeledEdit1.Text);
    jpg.Assign(bmp);
    jpg.SaveToFile(ChangeFileExt(LabeledEdit2.Text,'.jpeg'));
    jpg.Free;
    FreeAndNil(bmp);
   except
    on e:Exception do
     begin
      jpg.Free;
      bmp.Free;
     end;
   end;
end;
//Процедура конветирования BMP в JPEG
procedure TForm1.BMP_To_JPEG();
var
 jpg:TJPEGImage;
 bmp:TBitmap;
begin
   try
    jpg:=TJPEGImage.Create;
    bmp:=TBitmap.Create;
    bmp.LoadFromFile(LabeledEdit1.Text);
    jpg.Assign(bmp);
    jpg.SaveToFile(ChangeFileExt(LabeledEdit2.Text,'.jpeg'));
    jpg.Free;
    FreeAndNil(bmp);
   except
    on e:Exception do
     begin
      jpg.Free;
      bmp.Free;
     end;
   end;
end;

JPEG в BMP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Процедура конветирования JPEG в BMP
procedure TForm1.JPEG_To_BMP();
var
 jpg:TJPEGImage;
 bmp:TBitmap;
begin
   try
    jpg:=TJPEGImage.Create;
    bmp:=TBitmap.Create;
    jpg.CompressionQuality:=100;
    jpg.Compress;
    jpg.LoadFromFile(LabeledEdit1.Text);
    bmp.Assign(jpg);
    bmp.SaveToFile(ChangeFileExt(LabeledEdit2.Text,'.bmp'));
    FreeAndNil(jpg);
    FreeAndNil(bmp);
   except
    on e:Exception do
     begin
      FreeAndNil(jpg);
      FreeAndNil(bmp);
     end;
   end;
end;
//Процедура конветирования JPEG в BMP
procedure TForm1.JPEG_To_BMP();
var
 jpg:TJPEGImage;
 bmp:TBitmap;
begin
   try
    jpg:=TJPEGImage.Create;
    bmp:=TBitmap.Create;
    jpg.CompressionQuality:=100;
    jpg.Compress;
    jpg.LoadFromFile(LabeledEdit1.Text);
    bmp.Assign(jpg);
    bmp.SaveToFile(ChangeFileExt(LabeledEdit2.Text,'.bmp'));
    FreeAndNil(jpg);
    FreeAndNil(bmp);
   except
    on e:Exception do
     begin
      FreeAndNil(jpg);
      FreeAndNil(bmp);
     end;
   end;
end;

Создадим обработчик события OnClick нашей кнопки Button1:

1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
begin
  if RadioGroup1.ItemIndex = 0 then
    JPEG_To_BMP()
  else
    BMP_To_JPEG()
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  if RadioGroup1.ItemIndex = 0 then
    JPEG_To_BMP()
  else
    BMP_To_JPEG()
end;

Можно запустить программу и попробовать выполнить конвертацию файлов.

Скачать исходный код на Delphi 2007

Понравилась статья? Расскажи друзьям:


Обсудить