![]() |
|
|
![]()
|
|
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
Здраствуйте!!! Помогите начинающему программисту!!! Полазил тут по форуму в поисках ответа на интересующий меня вопрос, но слишком заумно написано, и как начинающему изучать С++ не очень мне дался текст... А вопрос у меня такой: как работать с BMP-файлами в Visual С++??? у меня версия 6.0 стоит, на ней и практикуюсь - миня именно интересует в данный момент как сделать так, чтобы можно было просматривать файлы с таким расширением и потом записывать их же... дома MSDN нетю, искал на сайте который мне советовали - там не нашел... решил обратиться к старичкам в надежде (= Можно просто какие функции нужны для работы с bmp-файлами и какие библиотеки необходимо подключать, а как их юзать я думаю смогу сам выяснить методом научного втыка... (= Заранее спасибо!!!
З.Ы. Сори, если темка такая с подробным ответом была, я не нашел... (= |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
ну вот, набор функций, который поможет обрисовать картину по работе с BMP'шками, функции брал из книжки, где то что то переделывал, где то что то не доделал, по этому вид у них возможно не самый лучший, но для начала пойдут
Это сообщение отредактировал(а) zkv - 25.12.2006, 23:43 |
|||
|
||||
| WERITAS |
|
|||
|
******** ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 2.5.2005 Где: Москва Репутация: нет Всего: 5 |
Вот на WinAPI
-------------------- Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак" |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 3 Всего: 459 |
Попробуете через CImage (MFC) это по проще должно получиться.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
Я так понял, что для того чтобы открыть BMP-файл, необходимо сначала узнать его размер, затем его просто тупо считываем и выводим на экран для просмотра, затем если необходимо перезаписать его, то тогда просто перезаписываем его - насколько я понял, хидеры это часть bmp-файла, которую мы считываем и считывая эти хидеры получаем полное изображение - поправьте еси где ошибся... (=
|
|||
|
||||
| zkv |
|
||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
чтобы открыть BMP-шку необходимо сначала узнать имя файла, этого достаточно (вам приводили выше пример). Например с CImage дело обстоит так:
а вообще BMP-файл состоит из следующих частей: 1. BITMAPFILEHEADER - хидер файла, здесь метка что файл - bmp, и смещение до растра от начала файла 2. BITMAPINFO - структура включающая в себя хидер растра и палитру, т.е.
3. растр это рассказываю потому, что не понимаю сказанного здесь:
хидеры без растра, сами по себе не дают изображения, в них только общие описания. |
||||||||
|
|||||||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
во, теперь усе понил!!! пафол пробовать че-нить наваять!!! Огромное сенкс всем!!!
|
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
Блин усе равно не получаетси написать прогу... могет помочь кто??? как именно в программе должно быть фсе устроено??? а то бьюсь ужо который день...
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
что именно прога должна делать? что не получается конкретно? где код?
выкладывай, посмотрим Это сообщение отредактировал(а) zkv - 6.1.2007, 21:30 |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
весь код выше
CImage img; img.Load( "example.bmp" ); img.Save( "example.bmp", ImageFormatBMP );//можно сохранять и в других форматах но не работаить, познаний моих не хватаить (= а прога должна просто-напросто загружать bmp-файл и потом записывать его (= вся проблема в том что мои познания в графике основываются лишь на том, что я прочитал на этой страничке... (= надеюсь на вашу помощь (= |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
ладно, начнем сначала
PS естественно просмотреть bmp'шку можно еще неимоверным количеством способов, я пытался найти самый простой с точки зрения новичка Присоединённый файл ( Кол-во скачиваний: 54 )
SimpleBMPViewer.zip 24,93 Kb |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
для начала просто надо научиться его открывать и закрывать, чтобы понять суть как енто делаетси, а уж потом поняв как это работает... в общем пока что надо просто расширить свои познания в открытии и закрытии этих файлов (=
а можно вопрос на чем написано??? у меня в 6 версии не хочет работать... хотя мож я чет не то делаю... но работать не хочет... блин чую зря полез в эти дебри, но разобраться теперь хочется с этим (= |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
||||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
запустилось (= теперь вопросы: хде должен находиться bmp-файл чтобы можно было его просмотреть??? а то чет указую путь в открыть и ничего, чистый экран... мож файл не туды запихнул??? и как менюшку делать это ладно... меня интересуить сам процесс считывания рисунка.... как он происходит именно??? нигде не нашел проверки на соответствие расширения тому, которое необходимо, выходит этой проверки нет и прога может открыть и jpg файл???
|
|||
|
||||
| zkv |
|
||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
IDR_SimpleBMPViewerTYPE, надо что бы там появилось нечто такое: \nSimpleBMPViewer\nSimpleBMPViewer\nBitmap Files (*.bmp)\n.bmp\nSimpleBMPViewer.Document\nSimpleBMPViewer.Document но на работоспособность приложения это не влияет, просто не дает пользователю открыть что то левое.
где угодно
смотри внимательно в класс документа, там есть объект класса CImage, при открытии документа в него загружается изображение (виртуальный метод BOOL CSimpleBMPViewerDoc::OnOpenDocument(LPCTSTR lpszPathName) ) про сохранение документа смотри BOOL CSimpleBMPViewerDoc::OnSaveDocument(LPCTSTR lpszPathName) подготовка рабочей области и, собственно, сама прорисовка в классе представления, методы void CSimpleBMPViewerView::OnInitialUpdate() и void CSimpleBMPViewerView::OnDraw(CDC* pDC) да, CImage умеет работать с жепегами и не только
PS не забудь подключить atlimage.h |
||||||||
|
|||||||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
это чтоб jpg можно было открывать??? а то у миня его нихде нетю... с открытыим-закрытием более-менее разобрался... какие ограничения на bmp-файл??? разрешение рисунка и размер самого файла |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
я ничего не понимаю, что происходит, без подключения этого файла компилятор вообще не узнает CImage и прога просто не запустится. Вообщем внимательно перечитайте мой предыдущий пост, там указаны методы которые надо добавить и/или изменить, как и что изменить смотрите в файлах моего проекта. интересно... |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
про открытие-закрытие я имел ввиду в программном коде как енто примерна фсе происходить что за что отвечаить (= у миня при компиляции выдаеть окошко програмки, я жму "открыть", нахожу файл с расширением bmp, нажимаю "открыть" и ничего... появляется новое окошко с названием файла и ничиво больше... и где взять тада atlimage.h???
|
|||
|
||||
| zkv |
|
||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
да, следствие зашло в тупик
попробуем по другому. 1. создаем проект MFC+MDI... вообщем как раньше говорил, только тип документа - вмр указываем, в принципе не обязательно. 2. открываем файл SimpleBMPViewerDoc.h (здесь и далее имена файлов указываются при условии, что проект был назван SimpleBMPViewer) 2.1. сразу после строки #pragma once вставляем #include <atlimage.h> 2.2. в объявление класса CSimpleBMPViewerDoc втыкаем следующие строки (например перед }; ):
3. Открываем SimpleBMPViewerDoc.cpp 3.1 добавляем куда-нить в конец файла:
4. теперь сложно 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. в конец файла пишем
6. открываем SimpleBMPViewerView.cpp 6.1. находим метод OnDraw(), титаническими усилиями приводим его к виду:
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'шек |
||||||||
|
|||||||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
блин делаю все как описано выше, в итоге получаетси все то же самое: открываю bmp, открывается в самой программе новое окошко, которое полностью белое... если нужно, скрин выложу - только вот не знаю как тут рисунки выкладывать... поентому придетси мылом слать...
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
зачем мне скрин? думаете белых окон не видел? мне уже самому интересно стало, что за напасть у вас там такая, вот сижу и прикидываю, может у вас операционная система не подходящая - нет тогда прога кричала бы что gdiplus.dll найти не может, может в 6-й студии не реализован CImage - нет тогда компилятор бы проект не собрал... А раз вы говорите прога запускается, то я даже не знаю, что еще предположить. Ну ладно, давайте посмотрим что у вас получилось, оставьте в вашем проекте файлы, тех же типов, что у меня и выкладывайте сюда (кнопка "Ответ в тему", если не ошибаюсь), поглядим
ps другой вариант поставить иную среду разработки. |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
Воть прикрепленные файлы это те, что у меня в проекте
Присоединённый файл ( Кол-во скачиваний: 11 )
SimpleBMPViewer.jpg 24,63 Kb |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
интересно, но в вашем проекте, не сделано НИЧЕГО из того, что я говорил, исключая создание каркаса приложения. Само изображение никак не покажется, надо проделать описанные выше действия.
Вообщем так, еще один вариант, берете ваш проект, проект созданный мной, из моего проекта копируете в свой все файлы + папку RES, исключая SimpleBMPViewer.sln и SimpleBMPViewer.vcproj, говорите "Заменить все", когда спросит. Потом открывайте полученный проект и пробуйте запускать. Или, все-таки, попробуйте проделать действия, описанные мной выше. |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
хм??? я открывал файлы которые сказал и менял там... ладно, видать не те файлы менял (= чичас попробую (= не может найти файл atlimage.h... хде его взять??? разобрался в чем моя проблема была, делал все как надо, файл этот найти не могет... пробовал и проект пересоздавать... чет вообще незадачится у меня... (=
Это сообщение отредактировал(а) AheFeanare - 9.1.2007, 23:05 |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
значит у вас его нет
вообщем теперь, либо качать SDK (я бы не стал, пожалуй), либо ставит компилятор по-новее, либо отказаться от использования gdiplus (все будет не так просто и наглядно, но возможно оно и лучше для обучения). |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
у меня далеко не безлимитка, поэтому качать не вариант... компилятор поставить поновее неоткудова, остается последний вариант - что же тогда делать???
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
идти другим путем, в общем сейчас уже время поджимать начинает, пробуй сам, можешь воспользоваться функциями загрузки/записи BMP приведенными ранее. Смысл тот же, в классе документа заводим объект(ы) который(е) хранят твои данные, думаю скорее всего это будет указатель на информационную структуру растра, и указатель на растр. Здесь же реализуем загрузку запись, в классе представления останется только вывести полученное на экран. Вообщем простенько все |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
zkv, в первом ващем сообщении в этом топике вы давали функции по работе с bmp-файлами, какой проект необходимо создавать чтобы они нормально работали??? и я так понял необходимо лишь знать имя файла и чтобы он находился в папке с проектом, чтобы он открылся??? т.е. сначала открыть файл с нужным именем, потом выполнить функцию загрузки, потом вывода на экран, потом записи, и закрыть файл??? поправьте если что не так понял
|
|||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
AheFeanare, все тоже самое эти функции можно разместить в классе документа (сделать его методами), и вызывать их там же, где вызывали CImage::Load() и CImage::Save() , членами-данными класса сделать
и затем, в классе представления готовить область рисования также как и делали ( OnInitialUpdate() ), и рисовать ( OnDraw() ) используя данные m_pBMI и m_pData (как - смотрите последнюю приведенную функцию). Вообще можно было бы завести свой класс, куда и запихать все эти методы, а в классе документа использовать объект этого класса (но пока можно повременить Да и еще
в описываемом случае мы используем имя файла, которое нам предоставил каркас приложения, сгенерированный мастером, откуда он его взял, нас, грубо говоря, не волнует. т.е. в методе BOOL CSimpleBMPViewerDoc::OnOpenDocument(LPCTSTR lpszPathName) lpszPathName - это имя интересующего нас файла, которое было получено в диалоге выбора файла, остается только его открыть. |
||||
|
|||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
я просто никогда не работал раньше в MFC, не знаю что и как... пытаюсь вот сейчас понять... значит просто заменить в той программе функции CImage::Load() и CImage::Save() на те OpenBmp() и SaveBMP()??? и потом где мы вызываем эти функции и вызов есесна изменить - и все???
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
все что могу сказать - что переделать проект не сложно, но головой подумать кое где тоже надо, все исходные данные у тебя есть, осталось только собрать все вместе, хотя бы попытаться
|
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
а может легче файл atlimage.h скачать где-нибудь??? и с ним попробовать запустить???
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
||||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
вообщем вот, правда с косяками, ну хоть будет над чем подумать, а то совсем не интересно будет иначе
переделывать все те же перечисленные выше методы Это сообщение отредактировал(а) zkv - 13.1.2007, 04:14 Присоединённый файл ( Кол-во скачиваний: 13 )
SimpleBMPViewer.zip 26,35 Kb |
|||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
35 мин (= вы миня вообще запутали... та же версия работала нужен лишь файл atlimage.h... можно его найти и попробовать с ним запустить, будет ли работать тогда??? или если эту версию, переделать те методы что на второй странице вы описывали??? а то я совсем че-т запутался...
|
|||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
очень сомневаюсь, думаю вслед за ним потянется немалый шлейф других файлов
это я и имел в виду, внимательно просмотрите файла о которых я говорил, и внесите все изменения в свой проект, правда просматривать на этот раз можно только BMP'шки. Ну и доделать много чего надо по идее - избавиться от мерцания, проверять ошибки, память там некорректно немного удаляется - все теперь на вашей совести. |
||||
|
|||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
а на 2005 студии работать норм будет старый??? подумал вот тут... а то что вы говорили с новым проектом все исправил, открывает!!! Огромное спасибо!!!
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
||||
|
||||
| AheFeanare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 25.12.2006 Репутация: нет Всего: нет |
ааа тогда хорошо, возьму 2005 студию и буду на ней уже разбираться
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |