Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рендер из xhtml в bmp 
:(
    Опции темы
frenchman
Дата 17.6.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 3.1.2007

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



Дан xhtml файл. 
Надо анализировать тэги в нем и сохранить в bmp визуальное представление этих тэгов ( text box , checkbox , fieldset , legend) например эти четыре. то есть обрабатывать только 5-6 тэгов в файле.
То есть на выходе должен быть скриншот - .bmp файл.

Как это сделать, помогите!!!
приложение под консоль. среда VS.
PM MAIL   Вверх
voov
Дата 17.6.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

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



Что именно как сделать? Рисовать БМП или анализировать тЭги.
PM MAIL   Вверх
frenchman
Дата 18.6.2008, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 3.1.2007

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



Цитата(voov @ 17.6.2008,  17:27)
Что именно как сделать? Рисовать БМП или анализировать тЭги.

и то и другое.
как анализировать, как по рез-ту анализа сделать так, чтобы  
например дан тэг textbox - a , его визуальное представление надо в bmp сохранить.

плиз оч. нужна помощь.... !!!
PM MAIL   Вверх
voov
Дата 18.6.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

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



Для анализа, т.е. разбора документа на составляющие нужен парсер. Его можно самому написать (у тебя тегов немного), можно прикрутить готовый. Смотря как стоит задача. xhtml-файл это ведь в первую очередь xml формат, а для него есть достаточно много уже готовых либ. Из них рекомендую майкрософтофскую msxml (может как загрузить xml структуру из файла или строки и разобрать по тегам, так и сделать обратное - из тегов собрать xml документ и сохранить его). Ссылку на документацию дать не могу, потому как не сохранил, но поиск выдаст много и с примерами. 
Разве что вот кусок кода 
Код

#include <msxml.h>

try {
// Create an instance of the parser
CComPtr<IXMLDOMDocument> spXMLDOM;
HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
if ( hr != S_OK || spXMLDOM.p == NULL ) throw CString("Не удалось создать объект XML парсера");

// Load the XML document file...
VARIANT_BOOL bSuccess = false;
hr = spXMLDOM->load(CComVariant(configFileName), &bSuccess);
if ( hr != S_OK || !bSuccess ) throw CString("Файл отсуствует или заблокирован другим процессом");

// Ищем тег comportlist - список СОМ портов
CComBSTR bstrSS(L"configuration/ports/comportlist");
CComPtr<IXMLDOMNode> spXMLNode;
hr = spXMLDOM->selectSingleNode(bstrSS, &spXMLNode);
if ( hr != S_OK || spXMLNode.p == NULL ) throw CString("Не найден XML узел 'comportlist'");

CComPtr<IXMLDOMNodeList> spXMLComPortList;
hr = spXMLNode->get_childNodes(&spXMLComPortList);
if (hr != S_OK || spXMLComPortList.p == NULL) throw CString("Не удалось получить потомков XML узла 'comportlist'");

long childCount = 0;
spXMLComPortList->get_length(&childCount);

for (long i=0; i<childCount; i++) {
    CComPtr<IXMLDOMNode> spXMLComPort;
    hr = spXMLComPortList->get_item(i, &spXMLComPort);
    if (hr != S_OK || spXMLComPort.p == NULL) throw CString("Не удалось получить один из XML узлов 'comport'");

    CComPtr<IXMLDOMNode> spXMLComPortNumb;

    hr = spXMLComPort->selectSingleNode(L"portnumb", &spXMLComPortNumb);
    if (hr != S_OK || spXMLComPortNumb.p == NULL) throw CString("Не удалось получить один из XML узлов 'comport/portnumb'");

    CComVariant varValue(VT_BSTR);

    spXMLComPortNumb->get_nodeTypedValue(&varValue);
    comPortDescr->portNumb = StrToIntW(varValue.bstrVal);
    VariantClear(&varValue);
}
    
} catch (CString strErr) {
    // обработка ошибки
    return -1;
} // catch


Что касается, рисования картинки - можно использовать библиотеку GDI+. С ней я немного работал, если будут вопросы обращайся - помогу по мере сил
PM MAIL   Вверх
frenchman
Дата 24.6.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 3.1.2007

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



Цитата(voov @ 18.6.2008,  09:57)
Для анализа, т.е. разбора документа на составляющие нужен парсер. Его можно самому написать (у тебя тегов немного), можно прикрутить готовый. Смотря как стоит задача. xhtml-файл это ведь в первую очередь xml формат, а для него есть достаточно много уже готовых либ. Из них рекомендую майкрософтофскую msxml (может как загрузить xml структуру из файла или строки и разобрать по тегам, так и сделать обратное - из тегов собрать xml документ и сохранить его). Ссылку на документацию дать не могу, потому как не сохранил, но поиск выдаст много и с примерами. 
Разве что вот кусок кода 
Код

#include <msxml.h>

try {
// Create an instance of the parser
CComPtr<IXMLDOMDocument> spXMLDOM;
HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
if ( hr != S_OK || spXMLDOM.p == NULL ) throw CString("Не удалось создать объект XML парсера");

// Load the XML document file...
VARIANT_BOOL bSuccess = false;
hr = spXMLDOM->load(CComVariant(configFileName), &bSuccess);
if ( hr != S_OK || !bSuccess ) throw CString("Файл отсуствует или заблокирован другим процессом");

// Ищем тег comportlist - список СОМ портов
CComBSTR bstrSS(L"configuration/ports/comportlist");
CComPtr<IXMLDOMNode> spXMLNode;
hr = spXMLDOM->selectSingleNode(bstrSS, &spXMLNode);
if ( hr != S_OK || spXMLNode.p == NULL ) throw CString("Не найден XML узел 'comportlist'");

CComPtr<IXMLDOMNodeList> spXMLComPortList;
hr = spXMLNode->get_childNodes(&spXMLComPortList);
if (hr != S_OK || spXMLComPortList.p == NULL) throw CString("Не удалось получить потомков XML узла 'comportlist'");

long childCount = 0;
spXMLComPortList->get_length(&childCount);

for (long i=0; i<childCount; i++) {
    CComPtr<IXMLDOMNode> spXMLComPort;
    hr = spXMLComPortList->get_item(i, &spXMLComPort);
    if (hr != S_OK || spXMLComPort.p == NULL) throw CString("Не удалось получить один из XML узлов 'comport'");

    CComPtr<IXMLDOMNode> spXMLComPortNumb;

    hr = spXMLComPort->selectSingleNode(L"portnumb", &spXMLComPortNumb);
    if (hr != S_OK || spXMLComPortNumb.p == NULL) throw CString("Не удалось получить один из XML узлов 'comport/portnumb'");

    CComVariant varValue(VT_BSTR);

    spXMLComPortNumb->get_nodeTypedValue(&varValue);
    comPortDescr->portNumb = StrToIntW(varValue.bstrVal);
    VariantClear(&varValue);
}
    
} catch (CString strErr) {
    // обработка ошибки
    return -1;
} // catch


Что касается, рисования картинки - можно использовать библиотеку GDI+. С ней я немного работал, если будут вопросы обращайся - помогу по мере сил

Парсер надо  писать самому! 
приложение консольное, 
а как его писать? с чего начинать?

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


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

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



написать толковый парсер задача требующая хорошего продумывания. на эту тему можно поискать уже придуманые алгоритмы. но для 3х-4х тегов побыстрому можно склепать что-нибудь попроще.
начни с примеров хмл файлов, которые у тебя могут быть, потом научись находить определенные теги. это несложно так как открывающему тегу <xxx> всегда соответсвует закрывающий </xxx> (сокращенную запись тега <xxx /> можно опустить для упрощения), где ххх - один из нужных тебе text box , checkbox , fieldset , legend
далее будешь анализировать то, что находится внутри тега
PM MAIL   Вверх
frenchman
Дата 25.6.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 3.1.2007

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



Цитата(voov @ 25.6.2008,  10:10)
написать толковый парсер задача требующая хорошего продумывания. на эту тему можно поискать уже придуманые алгоритмы. но для 3х-4х тегов побыстрому можно склепать что-нибудь попроще.
начни с примеров хмл файлов, которые у тебя могут быть, потом научись находить определенные теги. это несложно так как открывающему тегу <xxx> всегда соответсвует закрывающий </xxx> (сокращенную запись тега <xxx /> можно опустить для упрощения), где ххх - один из нужных тебе text box , checkbox , fieldset , legend
далее будешь анализировать то, что находится внутри тега

OK. это понял, пасиб)
а как сохранять эти компоненты в output.bmp ? чтобы по коду с тэгами, кот-й соот-ет чекбоксу - в файле .bmp сохранить компонент чекбокс? 
PM MAIL   Вверх
voov
Дата 25.6.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

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



посмотри выше ссылку на библиотеку GDI+. расказывать долго, а там все написано. я в файл картинку не сохранял, поэтому примера кода нет. с рисованием могу подсказать, но там все и так просто. 
создаешь объект типа битмап, объект типа графикс, рисуешь туда и сохраняешь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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