Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-82107
Жорж
2003-09-04 17:27
2003.09.25
Запись в базу через Button


1-82236
maxim2
2003-09-12 07:22
2003.09.25
Передача переменных


1-82262
3APA3A
2003-09-14 00:51
2003.09.25
Создание форм в Runtime из DLL


1-82258
alexus
2003-09-15 18:03
2003.09.25
DrawGrid


1-82172
leonidus
2003-09-13 23:46
2003.09.25
Вопрос по PopupMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский