Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2009, 00:39   #1
Ilja
Новичок
Джуниор
 
Регистрация: 07.03.2009
Сообщений: 2
По умолчанию Как загрузить BMP в массив и обратно в С++

Сейчас делаю прогу по моделированию лесных пожаров.
Проблема в том, что я только в прошлом семестре прошел основы программирования. Как работать с текстовыми фаилами меня научили, но не больше. Я конечно могу конвертировать изображения в текст вручную (с помощью инструмента "Raster to ASCII" в ArcMap), но мне за это больше четверки не поставят.

Не порекомендуете ли какую-нибудь пошаговую инструкцию, как загрузить значения пикселей .bmp в двухмерный массив и обратно?
Сейчас работаю в Visual C++ 2008 express.

2 месяца уже ищу, но все инструкции то ли с ошибками, то ли я не дорос еще до них.

Большое спасибо заранее!!
Ilja вне форума Ответить с цитированием
Старый 07.03.2009, 10:34   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Собственно так, я плохо знаком с си, но кое как перевел (не факт что без ошибок) если будут вопросы пиши.
Код:
HBITMAP bitmap = LoadImage(0, "c:\Pictures\MyCat.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_DEFAULTSIZE or LR_COLOR);//Загрузка картинки в hitmap
tagBITMAP BitmapInfo;
GetObject(bitmap, SizeOf(BitmapInfo), &BitmapInfo); //Получаем информацию о битмапе - размер бит на пиксель  итд..
// Вот тут нужно создать участок памяти (например buff) размером
//BitmapInfo.bmWidth * BitmapInfo.bmHeight * (BitmapInfo.bmBitsPixel / 4)
//или лучше массив (bi.bmWidth на bi.bmHeight) элементов размером по BitmapInfo.bmBitsPixel  бит(именно бит
//последний параметр это число бит на пиксель)

// вот собственно и загрузка в массив конечно везде нужно целочисленное деление.
GetBitmapBits(bitmap, BitmapInfo.bmWidth* BitmapInfo.bmHeight* (BitmapInfo.bmBitsPixel / 4), ?buff);
DeleteObject(bitmap);//Удаляем объект Bitmap
Аналогичная функция SetBitmapBits() помещает массив в Bitmap
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 07.03.2009 в 20:24.
0nni вне форума Ответить с цитированием
Старый 07.03.2009, 20:16   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

В Си/C++ присваивание делается при помощи знака = , а не как в паскале/делфи - :=.
MaTBeu вне форума Ответить с цитированием
Старый 07.03.2009, 20:28   #4
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
В Си/C++ присваивание делается при помощи знака = , а не как в паскале/делфи - :=.
Да, недосмотрел. MaTBeu, а по поводу массива помогите, на этом мои знати си кончаются через maloc() наверняка можно?
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 07.03.2009, 20:35   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Погодите. Вам массив какого типа нужен?
MaTBeu вне форума Ответить с цитированием
Старый 07.03.2009, 20:38   #6
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Там в коде комментарий по этому поводу.
Цитата:
Сообщение от 0nni
// Вот тут нужно создать участок памяти (например buff) размером
//BitmapInfo.bmWidth * BitmapInfo.bmHeight * (BitmapInfo.bmBitsPixel / 4)
//или лучше массив (bi.bmWidth на bi.bmHeight) элементов размером по BitmapInfo.bmBitsPixel бит(именно бит
//последний параметр это число бит на пиксель)
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 07.03.2009, 20:41   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Посмотрите вот загрузка/сохранение Bitmap.
На английском правда, но я думаю там все понятно.
MaTBeu вне форума Ответить с цитированием
Старый 07.03.2009, 20:53   #8
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Ммм, ну думаю автор темы разберется что к чему.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 07.03.2009, 23:48   #9
Ilja
Новичок
Джуниор
 
Регистрация: 07.03.2009
Сообщений: 2
По умолчанию

Спасибо! Инглиш знаем, но в приведенной инструкции не понял / не нашел:
- где собсно массив (=матрица? array)?
- Даны 2 функции, но
что писать в main, какие параметры передавать?
что нужно <include>?
Я был бы рад сам до этого всего докопаться, но времени не хватит. Пока что мне нужно сделать лишь три вещи: записать значения пикселей в матрицу, сделать с этими значенимями кое-что, создать новые картинки на основе измененных значений. Знаю как сделать только вторую часть ((

В общем, ищу либо работаещий код, либо совета, что нужно (и возможно) выучать за мах две недели, чтобы понять вышеуказанную инструкцию.

Если создавать графический интерфэйс в Visual C++, там есть кнопочки для работы с картинками, может, по этому пути идти?
Ilja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пребразовать string-строку в число и обратно. - Как? Avaj C++ Builder 16 03.02.2011 19:03
Как из .BMP считать попиксельно OrdJONY Мультимедиа в Delphi 7 17.08.2008 15:46
Как загрузить картинку? Editor Работа с сетью в Delphi 11 15.07.2008 23:13
Как обратно компелироваль? Ніжний Диявол Общие вопросы Delphi 2 14.05.2008 12:39
как перевести из integer в real(и обратно), и из real в string(и обратно) Ga-sergey Общие вопросы Delphi 2 08.06.2007 21:13