Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 5
1

Как сделать конвертацию jpeg в bmp и наоборот

01.04.2020, 14:09. Просмотров 1043. Ответов 6
Метки нет (Все метки)

Пытаюсь сделать конвертацию по этому коду:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.BMP2JPEGClick(Sender: TObject);
  var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Bmp.PixelFormat := pf32bit;
  Jpg := TJPEGImage.Create;
  try
    Bmp.LoadFromFile(OpenPictureDialog1.FileName);
    Jpg.Assign(Bmp);
    Jpg.SaveToFile(SavePictureDialog1.FileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;

Но когда пытаюсь загрузить фото, показывает ошибку: Unable to open file "".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2020, 14:09
Ответы с готовыми решениями:

Как сделать загрузку изображения сразу же после его конвертации из jpeg в bmp?
Добрый день пользователи.Можно ли после конвертации изображения, сразу же загрузку изображения на...

Resize JPEG, BMP, GIF, PNG --> JPEG
Доброго дня! Стала задача сделать ресайзер. Требования: картинка по соотношению вес/качество...

Как проверить открыт jpeg или bmp?
пишу на делфи лабу по обрабтке изображений procedure TForm2.N2Click(Sender: TObject); //Открыть...

Как dll, jpeg, bmp, txt упаковать в один exe
Привет! Помогите разобраться со сборкой в один exe? Например, для test.exe требуется test.dll ,...

6
Непрофессионал
2723 / 2392 / 362
Регистрация: 26.07.2011
Сообщений: 10,043
Записей в блоге: 1
01.04.2020, 14:26 2
в данном коде нет вызова диалога. соответственно, 99% за то, что OpenPictureDialog1.FileName равен пустой строке

Добавлено через 4 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button2Click(Sender: TObject);
var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  if OpenPictureDialog1.Execute then
  begin
    Bmp := TBitmap.Create;
    Bmp.PixelFormat := pf32bit;
    Jpg := TJPEGImage.Create;
    Bmp.LoadFromFile(OpenPictureDialog1.FileName);
    Jpg.Assign(Bmp);
    if SavePictureDialog1.Execute then
      Jpg.SaveToFile(SavePictureDialog1.FileName);
    Jpg.Free;
    Bmp.Free;
  end;
end;
0
1756 / 822 / 289
Регистрация: 15.11.2015
Сообщений: 3,241
01.04.2020, 15:37 3
Лучший ответ Сообщение было отмечено ekaterinashisha как решение

Решение

Преобразование BMP в JPG:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  ji: TJpegImage;
  bmap: TBitmap;
begin
  if not OpenDialog1.Execute then
    Exit;
  try
    bmap := TBitmap.Create;
    bmap.LoadFromFile(OpenDialog1.FileName);
 
    ji := TJpegImage.Create;
    ji.Assign(bmap);
    bmap.Free;
 
    ji.Grayscale := false; // Установить при необходимости флаг серого JPEG
    ji.ProgressiveEncoding := false; // Предпочитаю не включать
    ji.CompressionQuality := 90; // Задать нужное качество от 0 до 100
    ji.Compress; // Сжимает в JPEG
    ji.SaveToFile(NewFileName(OpenDialog1.FileName));
    ji.Free;
  except
//    Label1.Caption := 'Не удалось сохранить изображение в формате JPEG';
  end;
end;
Преобразование всех открываемых TPicture форматов в JPG:
Delphi
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
  ji: TJpegImage;
  pic: TPicture;
  bmap: TBitmap;
begin
  if not OpenDialog1.Execute then
    Exit;
  try
    pic := TPicture.Create;
    pic.LoadFromFile(OpenDialog1.FileName);
    bmap := TBitmap.Create;
    bmap.Width  := pic.Graphic.Width ;
    bmap.Height := pic.Graphic.Height;
    bmap.Canvas.Draw(0, 0, pic.Graphic); // Преобразовать загруженное изображение в Bitmap
    pic.Free;
 
    ji := TJpegImage.Create;
    ji.Assign(bmap);
    bmap.Free;
 
    ji.Grayscale := false; // Установить при необходимости флаг серого JPEG
    ji.ProgressiveEncoding := false; // Предпочитаю не включать
    ji.CompressionQuality := 90; // Задать нужное качество от 0 до 100
    ji.Compress; // Сжимает в JPEG
    ji.SaveToFile(NewFileName(OpenDialog1.FileName));
    ji.Free;
  except
//    Label1.Caption := 'Не удалось сохранить изображение в формате JPEG';
  end;
end;
Добавлено через 47 минут
Упустил функцию генерации нового имени файла:
Delphi
1
2
3
4
5
6
function NewFileName(FileName: string): string;
begin
  Result := FileName;
  SetLength(Result, Length(FileName) - Length(ExtractFileExt(FileName))); // Отрезали расширение файла
  Result := Result + '_.jpg'; // Изменили имя, чтобы не затереть, если исходный файл был JPEG
end;
1
Непрофессионал
2723 / 2392 / 362
Регистрация: 26.07.2011
Сообщений: 10,043
Записей в блоге: 1
01.04.2020, 16:06 4
Цитата Сообщение от AzAtom Посмотреть сообщение
Упустил функцию генерации нового имени файла:
есть волшебная функция
Pascal
1
ChangeFileExt(FileName,'.newext');
1
1756 / 822 / 289
Регистрация: 15.11.2015
Сообщений: 3,241
01.04.2020, 18:17 5
Цитата Сообщение от DenNik Посмотреть сообщение
есть волшебная функция
Я там ещё приписываю "_", чтобы не перезаписался JPEG, если он был открыт.

Добавлено через 31 минуту
Хотя, можно же написать
Delphi
1
ChangeFileExt(FileName,'_.newext');
0
Непрофессионал
2723 / 2392 / 362
Регистрация: 26.07.2011
Сообщений: 10,043
Записей в блоге: 1
01.04.2020, 21:44 6
А зачем? Смена расширения - уже другое имя. Ты же не будешь jpeg в jpeg конвертировать
0
1756 / 822 / 289
Регистрация: 15.11.2015
Сообщений: 3,241
01.04.2020, 22:23 7
Ну бывает надо. Может, пережать с меньшим качеством или пережать с меньшим разрешением и не потерять исходник.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2020, 22:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как сделать конвертацию изображения в Webp?
Нужна сделать конвертер изображений в формат Webp, кто нить знает как это реализовать ?

Как сделать конвертацию txt в Unicode ?
Если текст файл в ANSI то нехорошо получается,но если вручную сохранить как в Unicode ,то все...

Подскажите как лучше сделать конвертацию текстового файла в Access?
Подскажите как лучше сделать конвертацию текстового файла в Access? Проблема в том, что это файл не...

BMP в JPEG
На форме расположены компоненты: opendialog1 и DBImage1 мне нужно открыть jpeg изображение, но оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.