Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с BMP-файлами 
:(
    Опции темы
AheFeanare
Дата 8.1.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

PS не забудь подключить atlimage.h

это чтоб jpg можно было открывать??? а то у миня его нихде нетю...  smile 

с открытыим-закрытием более-менее разобрался... какие ограничения на bmp-файл??? разрешение рисунка и размер самого файла  smile  а то по-прежднему не желает показывать мне рисунок... или просто надо дольше подождать??? (= а остальное даж почти понятно (= разобраться можно следя за тем, как изменяется сама прога от моих действий (=
PM MAIL   Вверх
zkv
Дата 8.1.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(AheFeanare @  8.1.2007,  10:32 Найти цитируемый пост)
PS не забудь подключить atlimage.h

я ничего не понимаю, что происходит, без подключения этого файла компилятор вообще не узнает CImage и прога просто не запустится. Вообщем внимательно перечитайте мой предыдущий пост, там указаны методы которые надо добавить и/или изменить, как и что изменить смотрите в файлах моего проекта.
Цитата(AheFeanare @  8.1.2007,  10:32 Найти цитируемый пост)
с открытыим-закрытием более-менее разобрался...

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


Новичок



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

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



про открытие-закрытие я имел ввиду в программном коде как енто примерна фсе происходить что за что отвечаить (= у миня при компиляции выдаеть окошко програмки, я жму "открыть", нахожу файл с расширением bmp, нажимаю "открыть" и ничего... появляется новое окошко с названием файла и ничиво больше... и где взять тада atlimage.h???
PM MAIL   Вверх
zkv
Дата 9.1.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



да, следствие зашло в тупик smile 
попробуем по другому.
1. создаем проект MFC+MDI... вообщем как раньше говорил, только тип документа - вмр указываем, в принципе не обязательно.
2. открываем файл SimpleBMPViewerDoc.h (здесь и далее имена файлов указываются при условии, что проект был назван SimpleBMPViewer)
2.1. сразу после строки #pragma once вставляем #include <atlimage.h>
2.2. в объявление класса CSimpleBMPViewerDoc втыкаем    следующие строки (например перед }; ):
Код

public:
CImage m_imgMain;
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);


3. Открываем SimpleBMPViewerDoc.cpp
3.1 добавляем куда-нить в конец файла:
Код

BOOL CSimpleBMPViewerDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
    if (!CDocument::OnOpenDocument(lpszPathName))
        return FALSE;

    // TODO:  Add your specialized creation code here
    m_imgMain.Load( lpszPathName );
    return TRUE;
}

BOOL CSimpleBMPViewerDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
    // TODO: Add your specialized code here and/or call the base class
    m_imgMain.Save( lpszPathName );
    return TRUE;
    //return CDocument::OnSaveDocument(lpszPathName);
}  

4. теперь сложно smile открываем SimpleBMPViewer.h
4.1. добавляем строку    afx_msg void OnFileNew(); после строки    DECLARE_MESSAGE_MAP()
5. открываем SimpleBMPViewer.cpp
5.1 находим строку ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) - убираем её или комментируем
5.2. на место убранной строки пишем    ON_COMMAND(ID_FILE_NEW, OnFileNew)
5.3. в конец файла пишем 
Код

void CSimpleBMPViewerApp::OnFileNew()
{
}

6. открываем SimpleBMPViewerView.cpp
6.1. находим метод OnDraw(), титаническими усилиями приводим его к виду:
Код

void CSimpleBMPViewerView::OnDraw(CDC* pDC)
{
    CSimpleBMPViewerDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    CRect ClientRect;
    GetClientRect( ClientRect );
    CPoint ScrollPos=GetScrollPosition();
    ::BitBlt( pDC->GetSafeHdc(), ScrollPos.x, ScrollPos.y, ClientRect.Width(), ClientRect.Height(),
              pDoc->m_imgMain.GetDC(), ScrollPos.x, ScrollPos.y, SRCCOPY);
    pDoc->m_imgMain.ReleaseDC();
}

6.2. находим метод OnInitialUpdate(), титаническими усилиями приводим его к виду:
void CSimpleBMPViewerView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();
    CSimpleBMPViewerDoc* pDoc = GetDocument();
    CSize sizeTotal;
    sizeTotal.cx = pDoc->m_imgMain.GetWidth();
    sizeTotal.cy = pDoc->m_imgMain.GetHeight();
    SetScrollSizes(MM_TEXT, sizeTotal);
}
7. ищем кнопку Start (F5) на панели инструментов, жмем и наслаждаемся видом открываемых BMP'шек smile
PM MAIL   Вверх
AheFeanare
Дата 9.1.2007, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



блин делаю все как описано выше, в итоге получаетси все то же самое: открываю bmp, открывается в самой программе новое окошко, которое полностью белое... если нужно, скрин выложу - только вот не знаю как тут рисунки выкладывать... поентому придетси мылом слать...
PM MAIL   Вверх
zkv
Дата 9.1.2007, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



зачем мне скрин? думаете белых окон не видел? мне уже самому интересно стало, что за напасть у вас там такая, вот сижу и прикидываю, может у вас операционная система не подходящая - нет тогда прога кричала бы что gdiplus.dll найти не может, может в 6-й студии не реализован CImage - нет тогда компилятор бы проект не собрал... А раз вы говорите прога запускается, то я даже не знаю, что еще предположить. Ну ладно, давайте посмотрим что у вас получилось, оставьте в вашем проекте файлы, тех же типов, что у меня и выкладывайте сюда (кнопка "Ответ в тему", если не ошибаюсь), поглядим smile

ps другой вариант поставить иную среду разработки.
PM MAIL   Вверх
AheFeanare
Дата 9.1.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Воть прикрепленные файлы это те, что у меня в проекте  smile  архив почему-то сказал что не могу прикрепить, поэтому изменил просто расширение на изображение  smile 

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  SimpleBMPViewer.jpg 24,63 Kb
PM MAIL   Вверх
zkv
Дата 9.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



интересно, но в вашем проекте, не сделано НИЧЕГО из того, что я говорил, исключая создание каркаса приложения. Само изображение никак не покажется, надо проделать описанные выше действия. 
Вообщем так, еще один вариант, берете ваш проект, проект созданный мной, из моего проекта копируете в свой все файлы + папку RES, исключая SimpleBMPViewer.sln и SimpleBMPViewer.vcproj, говорите "Заменить все", когда спросит. Потом открывайте полученный проект и пробуйте запускать. 
Или, все-таки, попробуйте проделать действия, описанные мной выше.
PM MAIL   Вверх
AheFeanare
Дата 9.1.2007, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм??? я открывал файлы которые сказал и менял там... ладно, видать не те файлы менял (= чичас попробую (= не может найти файл atlimage.h... хде его взять??? разобрался в чем моя проблема была, делал все как надо, файл этот найти не могет... пробовал и проект пересоздавать... чет вообще незадачится у меня... (=

Это сообщение отредактировал(а) AheFeanare - 9.1.2007, 23:05
PM MAIL   Вверх
zkv
Дата 10.1.2007, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(AheFeanare @  9.1.2007,  22:49 Найти цитируемый пост)
не может найти файл atlimage.h

значит у вас его нет 
Цитата

Набор заголовочных файлов (headers) и библиотека импорта GdiPlus.lib, необходимые для сборки демонстрационных приложений, входят в состав последнего Platform SDK. Те, кто до сих пор не обновил идущий с Visual Studio 6.0 Platform SDK образца 1998 года, могут загрузить его с сайта Microsoft по адресу:

http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

Минимальный компонент, в состав которого входит GDI+, называется Windows Core SDK и имеет размер около 230 мегабайт.

На момент написания этих строк доступна версия Platform SDK за август 2001 г.

вообщем теперь, либо качать SDK (я бы не стал, пожалуй), либо ставит компилятор по-новее, либо отказаться от использования gdiplus (все будет не так просто и наглядно, но возможно оно и лучше для обучения). 

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


Новичок



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

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



у меня далеко не безлимитка, поэтому качать не вариант... компилятор поставить поновее неоткудова, остается последний вариант - что же тогда делать??? 
PM MAIL   Вверх
zkv
Дата 11.1.2007, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(AheFeanare @  10.1.2007,  16:54 Найти цитируемый пост)
что же тогда делать???  

идти другим путем, в общем сейчас уже время поджимать начинает, пробуй сам, можешь воспользоваться функциями загрузки/записи BMP приведенными ранее. Смысл тот же, в классе документа заводим объект(ы) который(е) хранят твои данные, думаю скорее всего это будет  указатель на информационную структуру растра, и указатель на растр. Здесь же реализуем загрузку запись, в классе представления останется только вывести полученное на экран. Вообщем простенько все smile
PM MAIL   Вверх
AheFeanare
Дата 11.1.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



zkv, в первом ващем сообщении в этом топике вы давали функции по работе с bmp-файлами, какой проект необходимо создавать чтобы они нормально работали??? и я так понял необходимо лишь знать имя файла и чтобы он находился в папке с проектом, чтобы он открылся??? т.е. сначала открыть файл с нужным именем, потом выполнить функцию загрузки, потом вывода на экран, потом записи, и закрыть файл??? поправьте если что не так понял  smile 
PM MAIL   Вверх
zkv
Дата 11.1.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



AheFeanare, все тоже самое эти функции можно разместить в классе документа (сделать его методами), и вызывать их там же, где вызывали CImage::Load() и  CImage::Save() , членами-данными класса сделать 
Код

LPBITMAPINFO        m_pBMI;    //указатель на информационную структуру
PBYTE                m_pData;        //указатель на растр
//не забывать освобождать память после завершения работы с данными

и затем, в классе представления готовить область рисования также как и делали ( OnInitialUpdate() ), и рисовать ( OnDraw() ) используя данные m_pBMI и m_pData (как - смотрите последнюю приведенную функцию).
Вообще можно было бы завести свой класс, куда и запихать все эти методы, а в классе документа использовать объект этого класса (но пока можно повременить smile ).
Да и еще
Цитата(AheFeanare @  11.1.2007,  10:54 Найти цитируемый пост)
необходимо лишь знать имя файла и чтобы он находился в папке с проектом, чтобы он открылся???

в описываемом случае мы используем имя файла, которое нам предоставил каркас приложения, сгенерированный мастером, откуда он его взял, нас, грубо говоря, не волнует. т.е. в методе 
BOOL CSimpleBMPViewerDoc::OnOpenDocument(LPCTSTR lpszPathName)  lpszPathName - это имя интересующего нас файла, которое было получено в диалоге выбора файла, остается только его открыть.

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


Новичок



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

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



я просто никогда не работал раньше в MFC, не знаю что и как... пытаюсь вот сейчас понять... значит просто заменить в той программе функции CImage::Load() и  CImage::Save() на те OpenBmp() и SaveBMP()??? и потом где мы вызываем эти функции и вызов есесна изменить - и все??? 
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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