Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Подскажите как правильно показать на экpане и сохранить в базе картинку формата JPEG

Delphi , Графика и Игры , JPEG

Подскажите как правильно показать на экpане и сохранить в базе картинку формата JPEG


if Picture.Graphic is TJPegImage then
begin
  bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
  Picture.Graphic.SaveToStream(bs);
  bs.Free;
end
else
if Picture.Graphic is TBitmap then
begin
  Jpg:=TJPegImage.Create;
  Jpg.CompressionQuality:=...;
  Jpg.PixelFormat:=...;
  Jpg.Assign(Picture.Graphic);
  Jpg.JPEGNeeded;
  bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
  Jpg.SaveToStream(bs);
  bs.Free;
  Jpg.Free;
end
else
  Field.Clear;

Here's the translation of the text into Russian:

Код, который вы предоставили, является частью программы Delphi, которая занимается сохранением изображения в базе данных. Основная проблема с этим кодом заключается в том, что он неправильно обрабатывает случай, когда Picture.Graphic не является JPEG-изображением.

Вот улучшенная версия вашего кода:

if Picture.Graphic is TJPegImage then
begin
  bs := TBlobStream.Create(TBlobField(Field), bmWrite);
  Picture.Graphic.SaveToStream(bs);
  bs.Free;
end
else if Picture.Graphic is TBitmap then
begin
  Jpg := TJPegImage.Create;
  try
    Jpg.Assign(Picture.Graphic);
    Jpg.CompressionQuality := ...; // настройте качество сжатия, как нужно
    Jpg.PixelFormat := ...; // настройте формат пикселей, как нужно
    bs := TBlobStream.Create(TBlobField(Field), bmWrite);
    Jpg.SaveToStream(bs);
    bs.Free;
  finally
    Jpg.Free;
  end;
end
else
begin
  Field.Clear;
end;

Вот что изменилось:

  1. Я добавил блок try...finally для обеспечения того, что TJPegImage будет освобождаться даже в случае возникновения исключения.
  2. Я удалил не必要ный вызов Jpg.JPEGNeeded.
  3. Вам нужно указать качество сжатия и формат пикселей JPEG-изображения, как нужно; эти параметры являются только placeholder в коде выше.
  4. Statement Field.Clear; должен быть перемещен за пределы блока if Picture.Graphic is TBitmap then, потому что он будет очищать полеregardless of whether a bitmap was saved or not.

Этот код предполагает, что вы используете Delphi 2009 или позднее, поскольку класс TJPegImage был введен в этой версии. Если вы используете более раннюю версию, вам может потребоваться другой подход для сохранения JPEG-изображений.

В статье описывается способ корректного отображения и сохранения картинок формата JPEG на экране и в базе данных с использованием Delphi.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: JPEG ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 11:31:54/0.0061910152435303/0