Страница 1 из 1

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

СообщениеДобавлено: 20.03.2013 11:29:50
roman-info01
Уважаемые форумчане, помогите, что-то я сообразить не могу.

Есть у меня таблица в 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" из базы?

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

СообщениеДобавлено: 20.03.2013 12:29:00
SeZuka
Что-то типа такого:
Код: Выделить всё
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;

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

СообщениеДобавлено: 20.03.2013 12:57:39
roman-info01
Спасибо за ответ - я примерно так и сделал

Привожу код:
// Процедура создания нового изображения нода
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);

Но изображение не появляется, хотя в базе оно корректно - если выгружаю в файл - оно просматривается.

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

СообщениеДобавлено: 20.03.2013 13:54:26
SeZuka
Покажите весь код.

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

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

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

Добавлено спустя 2 минуты 22 секунды:
Смысл моего кода - из базы получаем blob-поле, сохраняем его в ms (TMemoryStream), передаем ее в процедуру createnewimg, которая динамически создаем компоненты TImage и загружает изображения из ms

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

СообщениеДобавлено: 20.03.2013 17:38:10
SeZuka
Если сами еще не догадались, то это текущая позиция в потоке, куда временно загружается ваше изображение.
Видимо я уже подзабыл, что после SaveToStream(Ms) нужно установить ее на начало, чтоб потом LoadFromStream считывал с начала.