загрузка из MySQL изображения

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

загрузка из MySQL изображения

Сообщение roman-info01 » 20.03.2013 11:29:50

Уважаемые форумчане, помогите, что-то я сообразить не могу.

Есть у меня таблица в MySQL, поле img - blob - хранятся маленькие картинки, иконки

Получаю изображение:
mainDataModule.spr_imgQuery.Active:=false;
mainDataModule.spr_imgQuery.SQL.Text:='SELECT id,img FROM spr_img WHERE id=9090';
mainDataModule.spr_imgQuery.Active:=true;

Создаю переменную Tbitmap
var
img:TBitmap
begin
img:=TBitmap.Create;
end;

Как мне в данную переменную поместить содержимое поля "img" из базы?
roman-info01
новенький
 
Сообщения: 13
Зарегистрирован: 20.11.2012 08:08:15

Re: загрузка из MySQL изображения

Сообщение SeZuka » 20.03.2013 12:29:00

Что-то типа такого:
Код: Выделить всё
var
img:TBitmap;
MS: TMemmoryStream;
begin
img:=TBitmap.Create;
MS := TMemmoryStream.Create;
try
  TBlobField(mainDataModule.spr_imgQuery.FieldByName('img')).SaveToStream(MS);
  img.LoadFromStream(MS);
finally
  MS.Free;
end;
end;
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: загрузка из MySQL изображения

Сообщение roman-info01 » 20.03.2013 12:57:39

Спасибо за ответ - я примерно так и сделал

Привожу код:
// Процедура создания нового изображения нода
procedure TmainForm.createnewimg(node_name:string; pos_x:integer; pos_y:integer; bmp:TStream);
var
newImage:TImage;
begin
newImage:=TImage.Create(self); // Создать новый объект
newImage.Parent:=mainScrollBox; // Родительский объект
newImage.Name:=node_name; // Имя нового объекта
newImage.Left:=pos_x; // Первоначальное положение
newImage.Top:=pos_y;
newImage.Picture.LoadFromStream(bmp);
end;

.....................................................................
Основная программа
.....................................................................
// Изображение не найдено - использовать default
mainDataModule.spr_imgQuery.Active:=false;
mainDataModule.spr_imgQuery.SQL.Text:='SELECT id,img FROM spr_img WHERE id=9090';
mainDataModule.spr_imgQuery.Active:=true;
// Записать в поток изображение из базы
TBlobField(mainDataModule.spr_imgQuery.FieldByName('img')).SaveToStream(Ms);
createnewimg(node_name,node_pos_x,node_pos_y, Ms);

Но изображение не появляется, хотя в базе оно корректно - если выгружаю в файл - оно просматривается.
roman-info01
новенький
 
Сообщения: 13
Зарегистрирован: 20.11.2012 08:08:15

Re: загрузка из MySQL изображения

Сообщение SeZuka » 20.03.2013 13:54:26

Покажите весь код.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: загрузка из MySQL изображения

Сообщение roman-info01 » 20.03.2013 14:28:35

В общем, парни - спасибо всем за внимание. Бился больше 2 часов, пока не наткнулся на волшебное - "ms.Position := 0 ;"
ms - это у меня TMemoryStream - И ВСЕ ЗАРАБОТАЛО!!!

Объясните мне, плиз, что это такое - ms.Position := 0 ;
:shock:

Добавлено спустя 2 минуты 22 секунды:
Смысл моего кода - из базы получаем blob-поле, сохраняем его в ms (TMemoryStream), передаем ее в процедуру createnewimg, которая динамически создаем компоненты TImage и загружает изображения из ms
roman-info01
новенький
 
Сообщения: 13
Зарегистрирован: 20.11.2012 08:08:15

Re: загрузка из MySQL изображения

Сообщение SeZuka » 20.03.2013 17:38:10

Если сами еще не догадались, то это текущая позиция в потоке, куда временно загружается ваше изображение.
Видимо я уже подзабыл, что после SaveToStream(Ms) нужно установить ее на начало, чтоб потом LoadFromStream считывал с начала.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

Рейтинг@Mail.ru