Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизJpg в Blob через TStream Найти похожие ветки
← →
explorer (2003-09-02 10:20) [0]Мастера!
Посмотрел примеры по сабжу в форуме и попробовал такое же сделать. При записи картинки ругается "Bitmap image is not valid". Подскажите, где я чего не учел и как все правильно реализовать?
запись:
begin
if OpenPictureDialog1.Execute then
begin
f := OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile(f);
end;
try
ms := TMemoryStream.Create;
jpg := TJPEGImage.Create;
jpg.LoadFromFile(f);
jpg.SaveToStream(ms);
ms.Position := 0;
with Table1 do
begin
Edit;
Insert;
TBlobField(FieldByName("Kartinka")).LoadFromStream(ms);
Post;
end;
finally
ms.Free;
jpg.Free;
end;
end;
чтение:
try
ms := TMemoryStream.Create;
TBlobField(Table1.FieldByName("Kartinka")).SaveToStream(ms);
jpg := TJPEGImage.Create;
ms.Position := 0;
jpg.LoadFromStream(ms);
Image2.Picture.Assign(jpg);
finally
ms.Free;
jpg.Free;
end;
← →
explorer (2003-09-02 11:44) [1]Никто не подскажет... :(
← →
explorer (2003-09-02 13:31) [2]тогда, хоть посоветуйте какую-нибудь доку почитать по этому сабжу
← →
Digitman (2003-09-02 13:31) [3]
> Edit;
> Insert;
для начала прокомментируй, на кой шут ты делаешь сначала Edit и тут же Insert... ЛИБО вставка новой записи ЛИБО модификация существующей записи !!
← →
explorer (2003-09-02 13:47) [4]>Digitman ©
это я исправил (там, просто комментарий стоял для другой ф-ции). :)
Лучше, подскажите где я глобально напортачил?
← →
sniknik (2003-09-02 13:49) [5]по моему сохранять нужно оттуда же куда записываеш,
а то сохраняемые данные
jpg := TJPEGImage.Create;
jpg.LoadFromFile(f);
jpg.SaveToStream(ms);
разнятся с записью в имадж
jpg.LoadFromStream(ms);
Image2.Picture.Assign(jpg);
тогда уж надо
Image2.Picture.SaveToStream -> его записывать в базу
и после чтения
Image2.Picture.LoadFromStream <- туда ложить
← →
explorer (2003-09-02 14:03) [6]>sniknik ©
а если мне надо сначала данные внести в базу, а уж потом их считывать от туда в другую форму? Как в таком случае?
(Вы уж извините за ламерство в этом вопросе :( не приходилось еще работать с потоками и картинками)
В общих чертах задача такая: на одной форме происходит ввод различных данных (в том числе и вставка картинок).
Потом осуществляется выборка этих данных. С *.bmp все работает, а вот с *.jpeg не хотит!
Подскажите где грабли?
← →
Hooch (2003-09-02 14:06) [7]Image не умеет из блоба Jpeg грузить
← →
Verg (2003-09-02 14:20) [8]А зачем переваливать через Image?
Ms:= TFileStream.Create(OpenPictureDialog1.FileName,fmOpen Read);
try
TBlobField(FieldByName("Kartinka")).LoadFromStream(ms);
finally
Ms.Free;
end;
← →
explorer (2003-09-03 07:29) [9]>Hooch
А как же тогда отобразить картинку из БД?
>Verg ©
Все равно выдает сообщение "Bitmap image is not valid" :(
← →
explorer (2003-09-03 07:49) [10]при этом *.bmp без проблем загружается
← →
Digitman (2003-09-03 08:30) [11]Image2.Picture.Graphic := jpg;
← →
explorer (2003-09-03 08:46) [12]>Digitman ©
а как тогда все же *.jpg записать в базу?
Все что здесь предложили, почему то не работает с *.jpg :(
← →
Nikky (2003-09-03 09:49) [13]:) правильный ответ:
> Verg © (02.09.03 14:20) [8]
← →
explorer (2003-09-03 10:00) [14]>Nikky ©
Сделал так же. :(
Если выбираю *.jpg ошибка, если bmp - то все норм.
Где я мог оплошаться или что-то в коде не учел?
← →
explorer (2003-09-03 12:20) [15]Может в настройках BDE или самого Blob-поля надо что-то изменить?
← →
Digitman (2003-09-03 13:24) [16]
> explorer
я так что-то до сих пор и не понял - у тебя проблемы с записью в базу ? или со считыванием ранее успешно выполненной записи ?
← →
explorer (2003-09-03 13:36) [17]>Digitman ©
да пока проблемсы только с записью
Делаю как посоветовал Verg © (02.09.03 14:20) [8], но почему то работает только опять же с bmp, а с jpg - "Bitmap image is not valid"... и не могу понять где грабли
← →
Digitman (2003-09-03 14:40) [18]
> но почему то работает только опять же с bmp, а с jpg - "Bitmap
> image is not valid"... и не могу понять где грабли
на какой конкретно строчке в твоем коде приложение падает с таким исключением ? приводи обновленный фрагмент чтения и записи
← →
Hooch (2003-09-03 14:47) [19]вот рабочий пример чтения Jpeg из базы в Image
var
NewGraphic: TJPEGImage;
begin
if (actDoReceipt.Checked) and (not adoData.IsEmpty) then
begin
adoImage.Close;
adoImage.Parameters.ParamValues["@WareID"] := adoData.FieldValues["WareID"];
adoImage.Open;
if (not adoImage.IsEmpty) and (not adoImage.FieldByName("Picture").IsNull) then
begin
NewGraphic := TJPEGImage.Create;
try
NewGraphic.Assign(adoImage.FieldByName("Picture"));
imgImage.Picture.Graphic := NewGraphic;
finally
NewGraphic.Free;
end;
end
else
imgImage.Picture.Assign(nil);
← →
explorer (2003-09-04 06:15) [20]>Hooch ©
спасибо! Но, для начала, все же хотелось бы, этот *.jpg туда записать
← →
explorer (2003-09-04 13:18) [21]Сделал так:
var
blob :TBlobStream;
jpg : TJPEGImage;
try
with DataModule1.Table1 do
begin
Insert;
BLOB:= TBlobStream.Create(TBlobField(FieldByName("Kartinka")),bmWrite);
Post;
jpg.LoadFromStream(blob);
Image2.Picture.Graphic := jpg;
end;
finally
jpg.Free;
blob.Free;
end;
При записи в Image выдает ошибку "Jpeg error #42" !
Где грабли?
← →
Digitman (2003-09-04 13:56) [22]"грабли" как минимум в том, что создал ты объект TBlobStream в доступом только по записи (bmWrite), и тут же, через пару строк, пытаешься обратиться к нему по чтению)
← →
Arm79 (2003-09-04 16:34) [23]У меня тоже возникла подобная проблема.
procedure WriteToDB;
var
S:TADOBLOBStream;
J:TJPEGImage;
begin
if OpenPictureDialog1.Execute
then begin
ADOTable1.Edit;
S:=ADOTable1.CreateBLOBStream(ADOTable1Photo, bmReadWrite);
J:=TJPEGImage.Create;
J.LoadFromFile(OpenPictureDialog1.FileName);
J.SaveToStream(S);
ADOTable1.Post;
end;
end;
Прикол в том, что таблица переходит в режим редактирования, картинка грузится в J(и корректно отображается в Image), записывается в поток (проверял размеры), но после Post данные из потока теряются, а в БД ничего не заносится.
А когда я записываю бмп, все нормально. И считываю без проблем.
← →
Hawk2 (2003-09-04 16:54) [24]У меня вот так все нормально записывает:
procedure TForm1.Button2Click(Sender: TObject);
begin
IBTable1.Append;
TBLOBField(IBTable1.FieldByName("Image")).LoadFromFile("C:\Downloads\m p3\"+Edit1.Text+".jpg");
IBTable1.Post;
end;
Просьба к коду не придираться, он написан исключительно для пробы.
← →
Arm79 (2003-09-04 17:08) [25]А информация читается в DBImage?
← →
explorer (2003-09-05 06:21) [26]>Hawk2
а как после этого вывести картинку в Image?
← →
Hawk2 (2003-09-05 10:07) [27]А внести в базу уже получается?
← →
explorer (2003-09-05 11:58) [28]ВСЕ! Всем спасибки! Получилось!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c