-
Поиск по форуму ничего не дал. Ветки с вопросами или закрыты или ссылка в никуда. Поиск по сетке дает кусок переписанного поголовно кода, смысл которго записать картинку в поток с последующей записью в базу, т.к. просьба не пинать. На данном этапе в базу приходится записывать bmp, но хотелось бы уменьшить размер и хранить в ней картинки jpg. Если не затруднит дать нормальный пример или ссылку на такой. Спасибо. Какая база не принципиально, интересует сам алгоритм сохранения и извлечения в Timage. Какой то пример испытывал. Запись в БД проходила нормально, а при извлечении - ошибка.
-
Код показывай, где ошибка.
-
Кода нет, стер, т.к. разные варианты пробывал и уже запутался что где брал. Факт что ничто не подходило. Помню, что если зайти в редактирование структуры таблицы и тыкнуть мышом по заполненному полю Bloи, то там где картинк Bmp - показывается в другом окошке, а где сохранена через поток jpg? то выскакмвает окошко, в котором написано "Load image error" или что то в этом роде.
-
Laguna © (14.10.11 11:16) [2] >Кода нет, стер Пишите по новой)
-
> Кода нет
Ты предлагаешь написать его за тебя?
> Факт что ничто не подходило.
Ты предлагаешь подыскать что-нибудь подходящее за тебя?
> или что то в этом роде.
Ты предлагаешь воссоздать ошибку за тебя?
-
Записывал в таблицу на основе этого примера
if Picture.Graphic is TJPegImage then
begin
bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
Picture.Graphic.SaveToStream(bs);
bs.Free;
end
-
> Ega23
> > Кода нетТы предлагаешь написать его за тебя?
Я не просил писать, я просил ссылку на пример, если кто знает таковой. Или хотя бы алгоритм правильных действий по записи картинки в базу и извлечения.
-
> Или хотя бы алгоритм правильных действий по записи картинки > в базу и извлечения.
Приводишь всё к одному виду (либо bmp, либо jpg, либо что-то ещё) и записываешь. Либо записываешь как есть, но в отдельном поле помечаешь тип картинки. Считываешь также.
-
> Либо записываешь как есть,
Это как? Через потоки? Через обычное присваивание полю?
-
Laguna © (14.10.11 12:20) [8] через поток загружаешь картинку в блоб поле, а тип присваиваешь обычно.
-
если я создаю 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;
-
По поводу 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;
-
> stas © Видать я такой способ уже применял. Т.к. отработал криво, поэтому его и стер. Да, через MemoryStream нечто в базу записывается, но сами смотрите. http://s011.radikal.ru/i316/1110/a4/3a6d91c0d961.jpgЯ уже писал, что если по полю Blob в базе тыкнуть мышом, то должна показаться картинка в окошке, а здесь какая то несуразица и при загрузке выдает ошибку. ps еще из наблюдений. Если поле блоб не содержит данных, то "Blob" написано так, а если есть, то "BLOB" так.
-
Все, разобрался. Сделал через MemoryStream. C BlobStream так и не заработало.
-
Где-то примерно так:
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...
-
Запись
AdoCmd.Parameters.ParamByName('Field').LoadFromFile(PictureFile, ftVarBytes);
Чтение
Stream := DataSet.CreateBlobStream(DataSet.FieldByName(Field), bmRead);
-
А есть принципиальное отличие в использовании BlobStream и MemorySream ?
-
Казалось вопрос уже можно было закрыть. Найден метод загрузки картинки jpg или bmp в Blob-поле и извлечение его обратно в Timage. Однако проявилась следующая проблема. На форме лежат DBImage, которые связаны с Blob-полем. Когда в базе была картинка bmp - все было нормально. Стоило сохранить jpg, то при загрузке формы сразу же вылетает ошибка. Как поступить в данной ситуации? Убирать вообще DBImage, вместо их ставить Timage и банально в момент открытия таблицы загружать в них картинки? Не совсем удобно...
-
> Не совсем удобно..
Удобно бывает только в собственноручно обустроенном туалете, да и то - пока не увидишь кем-то более обустроенный вариант. (С)
-
> Стоило сохранить jpg,
ты хоть бы хелп почитал.. модуль нужный подключи.. или используй JEDI - халявные компоненты
-
> ты хоть бы хелп почитал..
При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg
-
> [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
-
> The property value is a TPicture object which can contain > an icon, metafile, bitmap, or other graphic object
О каком свойстве идет речь?
-
> [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.
-
> Inovet
Ты вобще в курсе, что речь идет о DBImage а не TImage?
-
> [24] Laguna © (23.10.11 00:03) > Ты вобще в курсе, что речь идет о DBImage а не TImage?
А ты вообще хелп-то открывал? DBCtrls.TDBImage.Picture
-
Если честно, то по хэлпу не смотрел, смотрел по коду при отладке. Заметил, что DBImage использует потоки, только обработка типа картинки вроде ка не определяется, что именно jpg. Я нашел способ загрузки из блоб поля на в Timage. Вся обработка и загрузка происходит как то с притормаживанием, это напрягает.
|