Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 602

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Доброго врнмени суток, подскажите можно ли загрузить в Image рисунок из БД Access, дело в том, что DBImage поддерживает только BMP, а у меня JPEG.
Или подскажите как решить энту проблему.
Заранее спасибо за ответ.

Илья Бабаков Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Илья Бабаков (статус: Посетитель)
Вопрос отправлен: 28 мая 2007, 07:15
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Попробуй uses Jpeg и TJpegImage. Должно помочь.

TJPEGImage encapsulates a jpeg graphic.

Unit

Jpeg

Description

Use TJPEGImage to read and write jpeg compressed image data. TJPEGImage handles the digital compression and decompression of still images for use in computer systems. It uses the data from an instance of TJPEGData, which contains the actual jpeg data source and is never modified. Each jpeg image object may share its TJPEGData object with other instances of a jpeg image by creating copies using the Assign method. The jpeg data source handles reference counting for the jpeg image objects that are linked to it.

TJPEGImage has an internal bitmap that represents the jpeg image. This internal image and the original source of the jpeg image are read only. TJPEGImage has properties that determine how each instance will handle color conversion, compression, decompression, performance, and so on.

The following are characteristics of this object. A TJPEGImage object:

Has no canvas (so it cannot draw onto a canvas). However, TJPEGImage implements the protected Draw method introduced in TGraphic, so it can draw itself on the canvas of another object.
Provides no access to the internal bitmap image that it creates for the JPEG image.
Performs reference counting and handle sharing by means of the TJPEGData object. Multiple instances can refer to the same TJPEGData image. TJPEGData is the actual owner of the file handle to the jpeg data source.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 28 мая 2007, 09:07

Ответ #2. Отвечает эксперт: Venom

Здравствуйте, Илья Бабаков!
или вот то, что я уже писал когда-то:

//открытие изображений
procedure TF_Main.MLoadPict(s:string;Img:TImage);
var MS:TStream;
jpg: TJPEGImage;
Code: Word;
ss:string;
begin
//создание потока
MS:=CDS.CreateBlobStream(CDS.FieldByName('Pict'), bmRead);
if MS.Size=0 then Exit;
try
MS.Read(Code, SizeOf(Code));
MS.Seek(0, 0);
//очищение TImage
if Assigned(Img.Picture.Graphic) then
Img.Picture.Graphic:=nil;
Case Code of
$4D42: //для картинки bmp
begin
Img.Picture.Graphic:=TBitmap.Create;
Img.Picture.Graphic.LoadFromStream(MS);
end;
$D8FF: //для jpeg картинки
begin
Img.Picture.Graphic:=TJPEGImage.Create;
Img.Picture.Graphic.LoadFromStream(MS);
end;
end;
Img.Visible:=True;
finally
MS.Free;
end;
end;

Ответ отправил: Venom (статус: 1-ый класс)
Время отправки: 28 мая 2007, 15:45


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 1 июня 2007, 06:44; участников в обсуждении: 3.
Илья Бабаков

Илья Бабаков (статус: Посетитель), 28 мая 2007, 17:48 [#1]:

Спосибо за внимание.
Venom,Можно подробней описать предоставленный код.
min@y™- если чесно, я ни чего не понял.
min@y™

min@y™ (статус: Доктор наук), 29 мая 2007, 08:15 [#2]:

А чего тут непонятного? TJpegImage - это тот же TImage, но для формата JPEG. У тебя же JPEG-картинки в BLOB-поле БД.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Venom

Venom (статус: 1-ый класс), 30 мая 2007, 13:32 [#3]:

А что именно не понятно? Могу объяснить каждую строчку, но времени на работе не так много, к сожалению... Так что лучше задай конкретный вопрос. Как пишут в магазинах:
проще спросить :)
Илья Бабаков

Илья Бабаков (статус: Посетитель), 31 мая 2007, 21:00 [#4]:

Проблему я уже решил с помощью DBImage, который держит формат Jpeg.
Но если чесно то хочется разобраться с потоками.
Пожайлуста обьясни:
//создание потока
MS:=CDS.CreateBlobStream(CDS.FieldByName('Pict'), bmRead);
if MS.Size=0 then Exit;
try
MS.Read(Code, SizeOf(Code));
MS.Seek(0, 0);
Venom

Venom (статус: 1-ый класс), 1 июня 2007, 06:44 [#5]:

Хорошо, что проблема решена:). Попытаюсь объяснить немного потоки.
MS:=CDS.CreateBlobStream(CDS.FieldByName('Pict'), bmRead); - записываем поток, bmread - чтение из поля в поток
if MS.Size=0 then Exit; - если поток пустой, то выход
MS.Read(Code, SizeOf(Code)); - читаем 2 первых байта из потока
MS.Seek(0, 0); - переходим в начало потока

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.