RGBQUAD* pRGB = new RGBQUAD[width * height];//width, height размеры битмапки
***
//считываешь содержимое битмапки в буфер pRGB
***
short cx, cy;
int iSize = height * widht;
for (int i = 0; i < iSize; i++)
{
cx = i % width;//координата х пиксела(относительно битмапки)
cy = i / widht;//координата у пиксела(относительно битмапки)
//цвета пиксела
BYTE bRed = (pRgb + i) -> rgbRed;
BYTE bGreen = (pRgb + i) -> rgbGreen;
BYTE bBlue = (pRgb + i) -> rgbBlue;
}
Visual C++ /vs/ *.BMP :)
Народ, у меня такой вопрос, решил както реализовать небольшой редактор. пусть для начала bmp формата.
так вот, нужно открыть для чтения некий файл bmp
и записать его содержимое в двумерный массив.
ну или списками, не в этом суть.
Проблема в том, что я нигде не могу найти полное описание строения bmp рисунка.
если кто знает, буду очень признателен :)
http://forums.realcoding.net/index.php?showtopic=15011&pid=80461&st=0&#entry80461
Также посмотри функцию GetDIBits();
Может лучше огород не городить а использовать стандартные средства,например ATL класс CImage который позволяет работать сразу с несколькими форматами(JPEG, GIF, BMP, PNG).
но вот, тут в чём проблема, класс то создаётся, а вот чтобы с ним работать нужно знать само стоение картинок.. программер начинающий, ещё многого могу не до понимать... Вот и тут наверное не так понял
2vitaly2003s, а где можно узнать как этим классом пользоваться, может надо какието библиотеки подключать?
В ссылке показан хедер битмапа (похоже без сигнатуры). Так что загружаешь файл в память, кастуешь указатель энтим типом - и вперед.
И все равно не понятно как с этим массивом работать. Я сейчас пытаюсь разработать графический редактор а-ля Paint. В общем все сделал на GDI осталась только проблема как сделать выделение участка экрана и перемещение его по нему(select). Как с помощью этого массива определить на какой его элемент показывает указатель мыши с координатами xi и yi?
но вот, тут в чём проблема, класс то создаётся, а вот чтобы с ним работать нужно знать само стоение картинок.. программер начинающий, ещё многого могу не до понимать... Вот и тут наверное не так понял
2vitaly2003s, а где можно узнать как этим классом пользоваться, может надо какието библиотеки подключать?[/QUOTE]
Читать MSDN
Если 256 цветов, то точка в элементе [yi*ImageWidth+xi] и т.п.
P.S. А про BMP формат ты все-таки почитай, почитай....
Цитата:
И все равно не понятно как с этим массивом работать. Я сейчас пытаюсь разработать графический редактор а-ля Paint. В общем все сделал на GDI осталась только проблема как сделать выделение участка экрана и перемещение его по нему(select). Как с помощью этого массива определить на какой его элемент показывает указатель мыши с координатами xi и yi?
Все очень просто
Код:
таким способом тебе будет удобней работать с пикселами.
получив пиксел ты можешь с ним делать все что хочешь.:)
к примеру ты кликнул мышью
Код:
***
WM_LBUTTONDOWN:
cx = LOWORD(lParam);
cy = HIWORD(lParam);
//проверяешь позицию битмапки
//допустим её координаты ix, iy
if (cx >= ix && cx <= width + ix && cy >= iy && cy <= height + iy)
{
//ты попал в битмапку кликом
//твой код
}
break;
***
WM_LBUTTONDOWN:
cx = LOWORD(lParam);
cy = HIWORD(lParam);
//проверяешь позицию битмапки
//допустим её координаты ix, iy
if (cx >= ix && cx <= width + ix && cy >= iy && cy <= height + iy)
{
//ты попал в битмапку кликом
//твой код
}
break;
***