Конференция "Начинающим" » Добавление в БД и извлечение картинки JPG [D6]
 
  • Laguna © (14.10.11 11:00) [0]
    Поиск по форуму ничего не дал. Ветки с вопросами или закрыты или ссылка в никуда. Поиск по сетке дает кусок переписанного поголовно кода, смысл которго записать картинку в поток с последующей записью в базу, т.к. просьба не пинать. На данном этапе в базу приходится записывать bmp, но хотелось бы уменьшить размер и хранить в ней картинки jpg. Если не затруднит дать нормальный пример или ссылку на такой. Спасибо. Какая база не принципиально, интересует сам алгоритм сохранения и извлечения в Timage. Какой то пример испытывал. Запись в БД проходила нормально, а при извлечении - ошибка.
  • Ega23 © (14.10.11 11:09) [1]
    Код показывай, где ошибка.
  • Laguna © (14.10.11 11:16) [2]
    Кода нет, стер, т.к. разные варианты пробывал и уже запутался что где брал. Факт что ничто не подходило. Помню, что если зайти в редактирование структуры таблицы и тыкнуть мышом по заполненному полю Bloи, то там где картинк Bmp - показывается в другом окошке, а где сохранена через поток jpg? то выскакмвает окошко, в котором написано "Load image error" или что то в этом роде.
  • stas © (14.10.11 11:45) [3]
    Laguna ©   (14.10.11 11:16) [2]
    >Кода нет, стер
    Пишите по новой)
  • Ega23 © (14.10.11 12:01) [4]

    > Кода нет


    Ты предлагаешь написать его за тебя?


    >  Факт что ничто не подходило.


    Ты предлагаешь подыскать что-нибудь подходящее за тебя?


    >  или что то в этом роде.


    Ты предлагаешь воссоздать ошибку за тебя?
  • Laguna © (14.10.11 12:03) [5]
    Записывал в таблицу на основе этого примера

    if Picture.Graphic is TJPegImage then
    begin
     bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
     Picture.Graphic.SaveToStream(bs);
     bs.Free;
    end

  • Laguna © (14.10.11 12:05) [6]
    > Ega23

    > > Кода нетТы предлагаешь написать его за тебя?


    Я не просил писать, я просил ссылку на пример, если кто знает таковой. Или хотя бы алгоритм правильных действий по записи картинки в базу и извлечения.
  • Ega23 © (14.10.11 12:16) [7]

    > Или хотя бы алгоритм правильных действий по записи картинки
    > в базу и извлечения.


    Приводишь всё к одному виду (либо bmp, либо jpg, либо что-то ещё) и записываешь. Либо записываешь как есть, но в отдельном поле помечаешь тип картинки.
    Считываешь также.
  • Laguna © (14.10.11 12:20) [8]

    > Либо записываешь как есть,

    Это как? Через потоки? Через обычное присваивание полю?
  • stas © (14.10.11 14:18) [9]
    Laguna ©   (14.10.11 12:20) [8]
    через поток загружаешь картинку в блоб поле, а тип присваиваешь обычно.
  • Laguna © (14.10.11 14:37) [10]
    если я создаю 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 © (14.10.11 14:46) [11]
    По поводу 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 © (14.10.11 16:26) [12]
    > stas ©

    Видать я такой способ уже применял. Т.к. отработал криво, поэтому его и стер. Да,  через MemoryStream нечто в базу записывается, но сами смотрите.
    http://s011.radikal.ru/i316/1110/a4/3a6d91c0d961.jpg
    Я уже писал, что если по полю Blob в базе тыкнуть мышом, то должна показаться картинка в окошке, а здесь какая то несуразица и при загрузке выдает ошибку.

    ps
    еще из наблюдений. Если поле блоб не содержит данных, то "Blob" написано так, а если есть, то "BLOB" так.
  • Laguna © (14.10.11 20:16) [13]
    Все, разобрался. Сделал через MemoryStream. C BlobStream так и не заработало.
  • Jeer © (14.10.11 21:43) [14]
    Где-то примерно так:

    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...
  • DVM © (15.10.11 00:23) [15]
    Запись

    AdoCmd.Parameters.ParamByName('Field').LoadFromFile(PictureFile, ftVarBytes);

    Чтение

    Stream := DataSet.CreateBlobStream(DataSet.FieldByName(Field), bmRead);
  • Laguna © (15.10.11 00:57) [16]
    А есть принципиальное отличие в использовании BlobStream и MemorySream ?
  • Laguna © (16.10.11 00:19) [17]
    Казалось вопрос уже можно было закрыть. Найден метод загрузки картинки jpg или bmp в Blob-поле и извлечение его обратно в Timage. Однако проявилась следующая проблема. На форме лежат DBImage, которые связаны с Blob-полем. Когда в базе была картинка bmp - все было нормально. Стоило сохранить jpg, то при загрузке формы сразу же вылетает ошибка. Как поступить в данной ситуации? Убирать вообще DBImage, вместо их ставить Timage  и банально в момент открытия таблицы загружать в них картинки? Не совсем удобно...
  • Jeer © (16.10.11 00:25) [18]

    > Не совсем удобно..


    Удобно бывает только в собственноручно обустроенном туалете, да и то - пока не увидишь кем-то более обустроенный вариант. (С)
  • Витлий Панасенко (20.10.11 14:46) [19]

    > Стоило сохранить jpg,

    ты хоть бы хелп почитал.. модуль нужный подключи.. или используй JEDI - халявные компоненты
  • Laguna © (20.10.11 23:59) [20]

    > ты хоть бы хелп почитал..

    При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg
  • Inovet © (21.10.11 00:08) [21]
    > [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 © (22.10.11 21:58) [22]

    > The property value is a TPicture object which can contain
    > an icon, metafile, bitmap, or other graphic object


    О каком свойстве идет речь?
  • Inovet © (22.10.11 23:35) [23]
    > [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 © (23.10.11 00:03) [24]
    > Inovet

    Ты вобще в курсе, что речь идет о DBImage а не TImage?
  • Inovet © (23.10.11 00:13) [25]
    > [24] Laguna ©   (23.10.11 00:03)
    > Ты вобще в курсе, что речь идет о DBImage а не TImage?

    А ты вообще хелп-то открывал?
    DBCtrls.TDBImage.Picture
  • Laguna © (23.10.11 00:17) [26]
    Если честно, то по хэлпу не смотрел, смотрел по коду при отладке. Заметил, что DBImage использует потоки, только обработка типа картинки вроде ка не определяется, что именно jpg. Я нашел способ загрузки из блоб поля на в Timage. Вся обработка и загрузка происходит как то с притормаживанием, это напрягает.
 
Конференция "Начинающим" » Добавление в БД и извлечение картинки JPG [D6]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]