Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.031 c
14-82485
Igorek
2003-09-06 18:55
2003.09.25
Опрос: какой секс предпочитают программисты?


11-82169
Bartov
2003-01-19 22:27
2003.09.25
Перекомпиляция SysDcu


3-82059
kuchumovkv
2003-09-02 17:47
2003.09.25
Работа с БД Lotus Notes


14-82427
SergP
2003-09-07 20:34
2003.09.25
Посоветуйте прогу для закачки файлов.


1-82206
Юлия
2003-09-12 14:25
2003.09.25
treeview cо стилем TVS_CHECKBOXES