Уважаемые форумчане, помогите, что-то я сообразить не могу.
Есть у меня таблица в 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" из базы?
загрузка из MySQL изображения
Модератор: Модераторы
-
roman-info01
- новенький
- Сообщения: 13
- Зарегистрирован: 20.11.2012 08:08:15
Что-то типа такого:
Код: Выделить всё
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;
-
roman-info01
- новенький
- Сообщения: 13
- Зарегистрирован: 20.11.2012 08:08:15
Спасибо за ответ - я примерно так и сделал
Привожу код:
// Процедура создания нового изображения нода
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);
Но изображение не появляется, хотя в базе оно корректно - если выгружаю в файл - оно просматривается.
Привожу код:
// Процедура создания нового изображения нода
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
В общем, парни - спасибо всем за внимание. Бился больше 2 часов, пока не наткнулся на волшебное - "ms.Position := 0 ;"
ms - это у меня TMemoryStream - И ВСЕ ЗАРАБОТАЛО!!!
Объясните мне, плиз, что это такое - ms.Position := 0 ;

Добавлено спустя 2 минуты 22 секунды:
Смысл моего кода - из базы получаем blob-поле, сохраняем его в ms (TMemoryStream), передаем ее в процедуру createnewimg, которая динамически создаем компоненты TImage и загружает изображения из ms
ms - это у меня TMemoryStream - И ВСЕ ЗАРАБОТАЛО!!!
Объясните мне, плиз, что это такое - ms.Position := 0 ;
Добавлено спустя 2 минуты 22 секунды:
Смысл моего кода - из базы получаем blob-поле, сохраняем его в ms (TMemoryStream), передаем ее в процедуру createnewimg, которая динамически создаем компоненты TImage и загружает изображения из ms
Если сами еще не догадались, то это текущая позиция в потоке, куда временно загружается ваше изображение.
Видимо я уже подзабыл, что после SaveToStream(Ms) нужно установить ее на начало, чтоб потом LoadFromStream считывал с начала.
Видимо я уже подзабыл, что после SaveToStream(Ms) нужно установить ее на начало, чтоб потом LoadFromStream считывал с начала.
