Подскажите как правильно показать на экpане и сохранить в базе картинку формата JPEG
if Picture.Graphic is TJPegImage thenbegin
bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
Picture.Graphic.SaveToStream(bs);
bs.Free;
endelseif Picture.Graphic is TBitmap thenbegin
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;
endelse
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;
Вот что изменилось:
Я добавил блок try...finally для обеспечения того, что TJPegImage будет освобождаться даже в случае возникновения исключения.
Я удалил не必要ный вызов Jpg.JPEGNeeded.
Вам нужно указать качество сжатия и формат пикселей JPEG-изображения, как нужно; эти параметры являются только placeholder в коде выше.
Statement Field.Clear; должен быть перемещен за пределы блока if Picture.Graphic is TBitmap then, потому что он будет очищать полеregardless of whether a bitmap was saved or not.
Этот код предполагает, что вы используете Delphi 2009 или позднее, поскольку класс TJPegImage был введен в этой версии. Если вы используете более раннюю версию, вам может потребоваться другой подход для сохранения JPEG-изображений.
В статье описывается способ корректного отображения и сохранения картинок формата JPEG на экране и в базе данных с использованием Delphi.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.