Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PNG-картинку выгрузить из BLOB-поля в TImage 
:(
    Опции темы
Alca
Дата 18.2.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Вот рабочий код с DBImage (без временных файлов и TImage - ей):
Код

include <pngimage.hpp>

TPngImage *pPng = new TPngImage();
__try {
    pPng->LoadFromFile(L"C:\\test.PNG");

    dmMain->ADOQuery1->Edit();
    DBImage1->Picture->Bitmap->Assign(pPng);
    dmMain->ADOQuery1->Post();
} __finally {
    delete pPng;
}

Будут какие-либо замечания, критика?

Это сообщение отредактировал(а) Alca - 18.2.2009, 13:31


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anikmar
Дата 18.2.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Alca @  18.2.2009,  13:29 Найти цитируемый пост)
Будут какие-либо замечания, критика?

Если работает, то какая может быть критика?
Главное должно отображаться нормально при просмотре БД.
PM MAIL ICQ   Вверх
Alca
Дата 18.2.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

какая может быть критика

может кто-то нашел способ по-лучше, например, через стримы (всеж красивше)
Цитата

Главное должно отображаться нормально при просмотре БД.

отображается  smile 

Это сообщение отредактировал(а) Alca - 18.2.2009, 15:13


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 18.2.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Есть замечания. Все то хорошо, но есть одно но. PNG-шная картинка вставляется в базу как BMP-шная.
Каритка test.PNG:
- реальный вес составляет 135 КБ;
- вес mdb-шника до      вставки 220 КБ;
- вес mdb-шника после вставки 4088 КБ;
Так что код:
Код

DBImage1->Picture->Bitmap->Assign(pPng);

ничем не отличается от того так как если бы вставлялся BMP-файл.
Т.е. идет преобразование PNG в BMP, что не есть гуд.
Вопрос актуален. 
Здается мне, что DBImage не умеет курить PNG как он есть (Bitmap image is not valid.).
Не умеет отображать PNG файлы.

Это сообщение отредактировал(а) Alca - 18.2.2009, 17:36


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anikmar
Дата 18.2.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Тогда попробуйте моим методом через потоки - не пользуя DBImage (Ну не люблю я этот контрол, что поделаешь!). По-моему должно получится - я всегда с JPEG работал, вроде реальный размер картинок в базу пихает (в смысле реально JPEG, а не BMP). C PNG также должно быть по идее...
PM MAIL ICQ   Вверх
Alca
Дата 18.2.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Буду пробывать. Но что-то меня мучают мутные сомнения.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.2.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Как я и предполагал, DBImage не любит png-формат.
По этому могу предложить такой - достаточно простой - вариант - основанный на работе с полями таблицы на прямую.
Для эксперимента использовал ADOConnection, ADOTable, DataSourse, DBImagе, DBGrid, OpenDialog с фильтром на *.png
Сама БД имеет всего два поля - id(счетчик) и img(blob-поле)
После подключения к БД - генерим поля таблицы - двойной клик по ADOTable - правый клик мышью - Add all fields.
Появятся два объекта - ADOTableid и ADOTableimg
DBImagе настраивать просто - DataSource -  наш DataSourse, DataField - img

Вот сам код вставки картинки
Код

#include <memory>
#include <pngimage.hpp>
//----------------------------------------------------------------------------------

std::auto_ptr<TPngImage>png(new TPngImage());
std::auto_ptr<Graphics::TBitmap>bmp(new Graphics::TBitmap());

if (OpenDialog1->Execute())
    {
    png->LoadFromFile(OpenDialog1->FileName);
    bmp->Assign(png.get());
    ADOTable1->Insert();
    ADOTable1img->Assign(bmp.get());
    ADOTable1->Post();
    }


Все нормально сохраняется и просматривается.
Собственно это можно сделать и с ADOQuery - только по умолчанию надо прописать в свойстве SQL "SELECT * FROM testtable" - поля будут генериться.

 
PM MAIL   Вверх
Alca
Дата 19.2.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

    bmp->Assign(png.get());

Я так уже делал. Картинка просматривается, но дело в том, что png-шка пинается в базу как bmp.
BMP весит на много больше чем PNG.
Посмотри размер Mdb-шника до и после вставки.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.2.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Alca @  19.2.2009,  11:29 Найти цитируемый пост)
BMP весит на много больше чем PNG.
Посмотри размер Mdb-шника до и после вставки. 


Цитата(mrbrooks @  19.2.2009,  10:21 Найти цитируемый пост)
Как я и предполагал, DBImage не любит png-формат.


надо искать компонент который нормально отобразит png. Потоки здесь не спасут.

Добавлено через 5 минут и 16 секунд
кстати БД можно и сжать.
PM MAIL   Вверх
Alca
Дата 19.2.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

кстати БД можно и сжать.

Код

vJRO = CreateOleObject(L"JRO.JetEngine");
vJRO.OleProcedure(L"CompactDatabase", usProvider1.c_str(), usProvider2.c_str());

??? Если ты это имел ввиду, то смысл?


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.2.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Alca, неа. я про использование классов TZCommpressionStream/TZDecommpressionStream (из zlib.hpp - в Бормане 2009 включена)- достаточно бодрая и шустрая вещь  smile
PM MAIL   Вверх
Alca
Дата 19.2.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Ок гляну.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.2.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Alca @  19.2.2009,  12:26 Найти цитируемый пост)
Ок гляну. 

Зацени  smile Жмет ооочень бодро  smile 
PM MAIL   Вверх
Alca
Дата 19.2.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Осталось простенький примерчик нарыть.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.2.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Alca @  19.2.2009,  13:58 Найти цитируемый пост)
Осталось простенький примерчик нарыть. 

Намек понятен - вот зацени - если понравится запакую проект  smile 

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  arch.rar 294,54 Kb
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.