![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Jpg в Blob через TStream [D7, Paradox]
explorer © (2003-09-02 10:20:00)
Мастера!
Посмотрел примеры по сабжу в форуме и попробовал такое же сделать. При записи картинки ругается "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-05 11:58:00) [1]
ВСЕ! Всем спасибки! Получилось!
Hawk2 (2003-09-05 10:07:00) [2]
А внести в базу уже получается?
explorer (2003-09-05 06:21:00) [3]
>Hawk2
а как после этого вывести картинку в Image?
Arm79 (2003-09-04 17:08:00) [4]
А информация читается в DBImage?
Hawk2 (2003-09-04 16:54:00) [5]
У меня вот так все нормально записывает:
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 16:34:00) [6]
У меня тоже возникла подобная проблема.
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 данные из потока теряются, а в БД ничего не заносится.
А когда я записываю бмп, все нормально. И считываю без проблем.
Digitman (2003-09-04 13:56:00) [7]
"грабли" как минимум в том, что создал ты объект TBlobStream в доступом только по записи (bmWrite), и тут же, через пару строк, пытаешься обратиться к нему по чтению)
explorer (2003-09-04 13:18:00) [8]
Сделал так:
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" !
Где грабли?
explorer (2003-09-04 06:15:00) [9]
>Hooch ©
спасибо! Но, для начала, все же хотелось бы, этот *.jpg туда записать
Hooch (2003-09-03 14:47:00) [10]
вот рабочий пример чтения 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);
Digitman (2003-09-03 14:40:00) [11]
> но почему то работает только опять же с bmp, а с jpg - "Bitmap
> image is not valid"... и не могу понять где грабли
на какой конкретно строчке в твоем коде приложение падает с таким исключением ? приводи обновленный фрагмент чтения и записи
explorer (2003-09-03 13:36:00) [12]
>Digitman ©
да пока проблемсы только с записью
Делаю как посоветовал Verg © (02.09.03 14:20) [8], но почему то работает только опять же с bmp, а с jpg - "Bitmap image is not valid"... и не могу понять где грабли
Digitman (2003-09-03 13:24:00) [13]
> explorer
я так что-то до сих пор и не понял - у тебя проблемы с записью в базу ? или со считыванием ранее успешно выполненной записи ?
explorer (2003-09-03 12:20:00) [14]
Может в настройках BDE или самого Blob-поля надо что-то изменить?
explorer (2003-09-03 10:00:00) [15]
>Nikky ©
Сделал так же. :(
Если выбираю *.jpg ошибка, если bmp - то все норм.
Где я мог оплошаться или что-то в коде не учел?
Nikky (2003-09-03 09:49:00) [16]
:) правильный ответ:
> Verg © (02.09.03 14:20) [8]
explorer (2003-09-03 08:46:00) [17]
>Digitman ©
а как тогда все же *.jpg записать в базу?
Все что здесь предложили, почему то не работает с *.jpg :(
Digitman (2003-09-03 08:30:00) [18]
Image2.Picture.Graphic := jpg;
explorer (2003-09-03 07:49:00) [19]
при этом *.bmp без проблем загружается
explorer (2003-09-03 07:29:00) [20]
>Hooch
А как же тогда отобразить картинку из БД?
>Verg ©
Все равно выдает сообщение "Bitmap image is not valid" :(