Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Загрузка картинки из базы данных в TImage

53K
08 января 2011 года
FunTime
16 / / 23.06.2010
1. Загружаю картинку из файла, и показываю её в TImage
 
Код:
if (OpenPicture->Execute()) {
    TPicture* photo = new TPicture();
    photo->LoadFromFile(OpenPicture->FileName);
    Image->Picture = (TPicture*)photo;
}

2. На нажатие кнопки Save, сохраняю картинку в базе данных MS Access.
 
Код:
if (!OpenPicture->FileName.IsEmpty()) {
((TBlobField*)Data->PersonsSet->FieldByName("Photo"))->LoadFromFile(OpenPicture->FileName);
}

3. Теперь, на создание формы я хочу получить картинку из базы данных в TImage. Только вот тут появляются проблемы
 
Код:
Image->Picture->Graphic->Assign((TBlobField*)Data->PersonsSet->FieldByName("Photo"));


Вылетает ошибка Read of address 0000000. Если попробовать сделать каким-то другим способом, тоже ошибки.
Проблем не будет если использовать какойто один формат, но картинки могут быть jpg, png, bmp
53K
08 января 2011 года
FunTime
16 / / 23.06.2010
Попробовал написать
 
Код:
TPicture *photo = new TPicture();
photo->Assign(Data->PersonsSet->FieldByName("Photo"));

Летит exception Bitmap image is not valid.
11
08 января 2011 года
oxotnik333
2.9K / / 03.08.2007
Цитата: FunTime

Проблем не будет если использовать какойто один формат, но картинки могут быть jpg, png, bmp


Храни в базе в отдельном поле информацию о формате картинке, и при загрузке выбирай алгоритм, соответствующий формату.

1
08 января 2011 года
kot_
7.3K / / 20.01.2000
используй поиск по форуму.
тыц,тыц,тыц и т.д.
для работы с несколькими форматами надо либо делать так как предложил камрад выше, либо обрабатывать исключения.
71K
27 апреля 2011 года
lyonovice
4 / / 27.04.2011
Цитата: FunTime

Проблем не будет если использовать какойто один формат, но картинки могут быть jpg, png, bmp


Доброе время суток!
У меня только JPG (Borland C++ 6 + Access) - можно уточнить - как все-таки прочитать JPG?
Спасибо!

11
27 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
Цитата: lyonovice
Доброе время суток!
У меня только JPG (Borland C++ 6 + Access) - можно уточнить - как все-таки прочитать JPG?
Спасибо!



TJPEGImage

71K
27 апреля 2011 года
lyonovice
4 / / 27.04.2011
Цитата: oxotnik333
TJPEGImage


Я пытаюсь сделать
TJPEGImage *examp = new TJPEGImage;
examp->LoadFromStream((TStream*)((TBlobField*)ADOTablePict->FieldByName("Title")));

и получаю "... EAccessViolation with message 'Access violation with address 40030809 in module 'rtl60.bpl'
Или нужно делать последовательное преобразование типов?

11
27 апреля 2011 года
oxotnik333
2.9K / / 03.08.2007
Так попробуй:
 
Код:
TMemoryStream *stm = new TMemoryStream();
TJPEGImage *examp = new TJPEGImage;
((TBlobField*)ADOTablePi ct->FieldByName("Title"))->SaveToSream(stm);
stm->Seek(0, 0);
examp->LoadFromStream(stm);
delete stm;
71K
27 апреля 2011 года
lyonovice
4 / / 27.04.2011
Цитата: oxotnik333
Так попробуй:
 
Код:
TMemoryStream *stm = new TMemoryStream();
TJPEGImage *examp = new TJPEGImage;
((TBlobField*)ADOTablePi ct->FieldByName("Title"))->SaveToSream(stm);
stm->Seek(0, 0);
examp->LoadFromStream(stm);
delete stm;



Спасибо... Мне тоже так хотелось... но не получилось... поскольку SaveToSream() не есть метод TBlobField...
Но вот так - получилось

TBlobField* pFieldr = (TBlobField*)ADOTablePict->FieldByName("Title");
TADOBlobStream* pmemr = new TADOBlobStream(pFieldr, bmRead);
pmemr->Seek(0, soFromBeginning);
examp->LoadFromStream(pmemr);

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог