![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление в БД и извлечение картинки JPG [D6]
Laguna © (2011-10-14 11:00:00)Поиск по форуму ничего не дал. Ветки с вопросами или закрыты или ссылка в никуда. Поиск по сетке дает кусок переписанного поголовно кода, смысл которго записать картинку в поток с последующей записью в базу, т.к. просьба не пинать. На данном этапе в базу приходится записывать bmp, но хотелось бы уменьшить размер и хранить в ней картинки jpg. Если не затруднит дать нормальный пример или ссылку на такой. Спасибо. Какая база не принципиально, интересует сам алгоритм сохранения и извлечения в Timage. Какой то пример испытывал. Запись в БД проходила нормально, а при извлечении - ошибка.
Laguna (2011-10-23 00:17:00) [1]Если честно, то по хэлпу не смотрел, смотрел по коду при отладке. Заметил, что DBImage использует потоки, только обработка типа картинки вроде ка не определяется, что именно jpg. Я нашел способ загрузки из блоб поля на в Timage. Вся обработка и загрузка происходит как то с притормаживанием, это напрягает.
Inovet (2011-10-23 00:13:00) [2]> [24] Laguna © (23.10.11 00:03)
> Ты вобще в курсе, что речь идет о DBImage а не TImage?
А ты вообще хелп-то открывал?
DBCtrls.TDBImage.Picture
Laguna (2011-10-23 00:03:00) [3]> Inovet
Ты вобще в курсе, что речь идет о DBImageа не TImage?
Inovet (2011-10-22 23:35:00) [4]> [22] Laguna © (22.10.11 21:58)
> > The property value is a TPicture object which can contain
> > an icon, metafile, bitmap, or other graphic object
>
> О каком свойстве идет речь?
Представь себе, о Picture.
Laguna (2011-10-22 21:58:00) [5]
> The property valueis a TPicture object which can contain
> an icon, metafile, bitmap, or other graphic object
О каком свойстве идет речь?
Inovet (2011-10-21 00:08:00) [6]> [20] Laguna © (20.10.11 23:59)
> > ты хоть бы хелп почитал..
>
> При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg
The property value is a TPicture object which can contain an icon, metafile, bitmap, or other graphic object
Laguna (2011-10-20 23:59:00) [7]
> ты хоть бы хелп почитал..
При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg
Витлий Панасенко (2011-10-20 14:46:00) [8]
> Стоило сохранить jpg,
ты хоть бы хелп почитал.. модуль нужный подключи.. или используй JEDI - халявные компоненты
Jeer (2011-10-16 00:25:00) [9]
> Не совсем удобно..
Удобно бывает только в собственноручно обустроенном туалете, да и то - пока не увидишь кем-то более обустроенный вариант. (С)
Laguna (2011-10-16 00:19:00) [10]Казалось вопрос уже можно было закрыть. Найден метод загрузки картинки jpg или bmp в Blob-поле и извлечение его обратно в Timage. Однако проявилась следующая проблема. На форме лежат DBImage, которые связаны с Blob-полем. Когда в базе была картинка bmp - все было нормально. Стоило сохранить jpg, то при загрузке формы сразу же вылетает ошибка. Как поступить в данной ситуации? Убирать вообще DBImage, вместо их ставить Timage и банально в момент открытия таблицы загружать в них картинки? Не совсем удобно...
Laguna (2011-10-15 00:57:00) [11]А есть принципиальное отличие в использовании BlobStream и MemorySream ?
DVM (2011-10-15 00:23:00) [12]Запись
AdoCmd.Parameters.ParamByName('Field').LoadFromFile(PictureFile, ftVarBytes);
Чтение
Stream := DataSet.CreateBlobStream(DataSet.FieldByName(Field), bmRead);
Jeer (2011-10-14 21:43:00) [13]Где-то примерно так:
M: TStream;
jpg: TJPEGImage;
qu: T*Dataset;
//
jpg := TJPEGImage.Create;
jpg.Performance := jpBestQuality;
jpg.Scale := jsFullSize;
qu.Open;
M := qu.CreateBlobStream(vFieldName, bmRead);
jpg.LoadFromStream(M);
...
ну и там всякие try, free...
Laguna (2011-10-14 20:16:00) [14]Все, разобрался. Сделал через MemoryStream. C BlobStream так и не заработало.
Laguna (2011-10-14 16:26:00) [15]> stas ©
Видать я такой способ уже применял. Т.к. отработал криво, поэтому его и стер. Да, через MemoryStream нечто в базу записывается, но сами смотрите.
http://s011.radikal.ru/i316/1110/a4/3a6d91c0d961.jpg
Я уже писал, что если по полю Blob в базе тыкнуть мышом, то должна показаться картинка в окошке, а здесь какая то несуразица и при загрузке выдает ошибку.
ps
еще из наблюдений. Если поле блоб не содержит данных, то "Blob" написано так, а если есть, то "BLOB" так.
stas (2011-10-14 14:46:00) [16]По поводу TBlobStream не знаю, вот так через MemoryStream
Var
bs : TMemoryStream;
begin
bs := TMemoryStream.Create();
Image1.Picture.Graphic.SaveToStream(bs);
Table1.Insert;
Bs.position:=0;
Table1Foto1.LoadFromStream(bs);
Table1.Post;
bs.Free;
Laguna (2011-10-14 14:37:00) [17]если я создаю Blob-поток и ассоциируе его с конкретным полем таблицы, то почему не происходит записи картинки ?
Var
bs : TBlobStream;
begin
bs := TBlobStream.Create(Table1Foto1, bmWrite);
Image1.Picture.Graphic.SaveToStream(bs);
или нужно делать так?
Var
bs : TBlobStream;
begin
bs := TBlobStream.Create(Table1Foto1, bmWrite);
Image1.Picture.Graphic.SaveToStream(bs);
Table1.Insert;
Table1Foto1.LoadFromStream(bs);
Table1.Post;
bs.Free;
stas (2011-10-14 14:18:00) [18]Laguna © (14.10.11 12:20) [8]
через поток загружаешь картинку в блоб поле, а тип присваиваешь обычно.
Laguna (2011-10-14 12:20:00) [19]
> Либо записываешь как есть,
Это как? Через потоки? Через обычное присваивание полю?
Ega23 (2011-10-14 12:16:00) [20]
> Или хотя бы алгоритм правильных действий по записи картинки
> в базу и извлечения.
Приводишь всё к одному виду (либо bmp, либо jpg, либо что-то ещё) и записываешь. Либо записываешь как есть, но в отдельном поле помечаешь тип картинки.
Считываешь также.