Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 07.02.2015
Сообщений: 8

Как получить массив из BMP файла

07.02.2015, 00:19. Показов 1820. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу на c++ Winapi в VisualSudio2013.
Мне нужно получить массив с значениями rgb из bmp средствами winapi.
Если я не на правильном пути, подскажите как это реализовать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2015, 00:19
Ответы с готовыми решениями:

Как получить цвет пикселя из BMP файла
Можно как-нибудь получить цвет определённого пикселя BMP файла и узнать разрешение файла.

Как получить массив цветов пикселей в BMP?
и как изменить цвет пикселя?

Как получить структуру файла bmp в классе TBitmap?
Открытие файла через стандартный диалог: OpenDialog1->Execute() Изображение сохраняется как TBitmap в source: ...

10
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
07.02.2015, 00:29
Цитата Сообщение от Vlad_M Посмотреть сообщение
Пишу на c++ Winapi в VisualSudio2013.
Мне нужно получить массив с значениями rgb из bmp средствами winapi.
Если я не на правильном пути, подскажите как это реализовать.
А какой путь-то? У тебя его нет.
0
0 / 0 / 1
Регистрация: 07.02.2015
Сообщений: 8
07.02.2015, 00:39  [ТС]
dmitry94, а как быть?
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
07.02.2015, 00:46
Цитата Сообщение от Vlad_M Посмотреть сообщение
dmitry94, а как быть?
Что именно тебе нужно и для каких целей. Может тогда удастся подсказать.
0
0 / 0 / 1
Регистрация: 07.02.2015
Сообщений: 8
07.02.2015, 00:58  [ТС]
Есть у меня код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#define width 640
#define heigh 480
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam,LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
    WNDCLASSEX  windowClass;
    HWND hWnd;
    MSG uMsg;
    windowClass.cbSize = sizeof(WNDCLASSEX);
    windowClass.style = 0;
    windowClass.lpfnWndProc = WindowProc;
    windowClass.cbClsExtra = 0;
    windowClass.cbWndExtra = 0;
    windowClass.hInstance = hInst;
    windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    windowClass.hbrBackground = (HBRUSH)GetStockObject(COLOR_WINDOWFRAME);
    windowClass.lpszMenuName = 0;
    windowClass.lpszClassName = L"Xaar";
    windowClass.hIconSm = 0;
    
    RegisterClassEx(&windowClass);
 
    hWnd = CreateWindow(windowClass.lpszClassName, L"Xaar", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - width) / 2, (GetSystemMetrics(SM_CYSCREEN) - heigh) / 2, width, heigh, NULL, NULL, NULL, NULL);
 
    ShowWindow(hWnd, SW_SHOW);
    //----------------MENU--------------------
    HMENU hMenu = CreateMenu();
    HMENU hMenuPopup = CreateMenu();
    AppendMenu(hMenuPopup, MF_STRING, 101, L"Открыть");
    AppendMenu(hMenuPopup, MF_STRING, 102, L"Выйти");
    AppendMenu(hMenu, MF_POPUP,(UINT) hMenuPopup, L"Файл");
    SetMenu(hWnd, hMenu);
    while (GetMessage(&uMsg, hWnd, NULL, NULL))
    {
        TranslateMessage(&uMsg);
        DispatchMessage(&uMsg);
    }
    return uMsg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CLOSE:
        ExitProcess(0);
    break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    case WM_COMMAND:
         switch (LOWORD(wParam))
         {
         case 101:
             OPENFILENAME ofn;      
             wchar_t szFile[260];      
             HWND hwnd;              
             HANDLE hf;              
             ZeroMemory(&ofn, sizeof(ofn));
             ofn.lStructSize = sizeof(ofn);
             ofn.hwndOwner = NULL;
             ofn.lpstrFile = szFile;
             ofn.lpstrFile[0] = '\0';
             ofn.nMaxFile = sizeof(szFile);
             ofn.lpstrFilter = L"bmp\000*.bmp\000\000";
             ofn.nFilterIndex = 1;
             ofn.lpstrFileTitle = NULL;
             ofn.nMaxFileTitle = 0;
             ofn.lpstrInitialDir = NULL;
             ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
             if (GetOpenFileName(&ofn) == TRUE)
             {
                         // Здесь нужно получить массив rgb с файла ofn.lpstrFile(путь к файлу BMP)
             }
             break;
         case 102:
             break;
         }
    }
}
Добавлено через 1 минуту
73 строка кода.
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
07.02.2015, 01:17
Цитата Сообщение от Vlad_M Посмотреть сообщение
// Здесь нужно получить массив rgb с файла ofn.lpstrFile (BMP)
Ok. Но мы же должны представлять, какие именно данные мы должны получить и в каком виде, формат этих данных у нас есть?

p.s. понятие "массив rgb" - очень абстрактное. Какова размерность этого массива, что значат его значения. и т.п.

Добавлено через 7 минут
Цитата Сообщение от dmitry94 Посмотреть сообщение
Vlad_M
Научись формулировать свои мысли четко, ясно и однозначно. Задавая вопрос можно привести некоторые исходные данные, например анализ подобных ситуаций.
0
0 / 0 / 1
Регистрация: 07.02.2015
Сообщений: 8
07.02.2015, 01:36  [ТС]
Нужно что то типа
C++
1
2
3
int r = rgb[y][x][r];
int g = rgb[y][x][g];
int b = rgb[y][x][b];
r, g, b принимают значения 0...255

Добавлено через 6 минут
http://ziggi.org/chtenie-bmp-v-cpp/ здесь то что мне надо, но оно не работает у меня.

Добавлено через 51 секунду
http://ziggi.org/chtenie-bmp-v-cpp/ здесь то что мне надо, но оно не работает у меня.
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
07.02.2015, 01:56
Спасибо. Если будут идеи обязательно выскажу, да и всем остальным теперь более понятна суть проблемы.

Добавлено через 14 минут
Основное, что я бы использовал по теме:

http://stackoverflow.com/quest... om-hbitmap
http://stackoverflow.com/quest... ng-c-win32
Цвет пикселя HBITMAP по координатам
https://msdn.microsoft.com/en-... s.85).aspx
http://www.gamedev.ru/code/forum/?id=150861
http://tipsandtricks.runicsoft... orial.html
https://ru.wikipedia.org/wiki/BMP
1
0 / 0 / 1
Регистрация: 07.02.2015
Сообщений: 8
07.02.2015, 02:03  [ТС]
Спасибо. А если использовать loadimage, из него можно получить доступ к пикселям?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
07.02.2015, 02:09
Цитата Сообщение от Vlad_M Посмотреть сообщение
Мне нужно получить массив с значениями rgb из bmp
а с чего ты взял что там массив RGB???
во первых массив может быть только у 24битных бмпешек, у остальных массив индексов палитры
да и массив там RGBa кратный 4
считывается заголовок файла анализируются данные и по смещению, который есть в заголовке,ищется массив данных
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
07.02.2015, 02:30
Цитата Сообщение от Vlad_M Посмотреть сообщение
Спасибо. А если использовать loadimage, из него можно получить доступ к пикселям?
Насколько я понимаю, LoadImage возвращает ссылку на HBITMAP, работа с которым описана по ссылкам выше, так что доступ к пикселям скорее всего получить можно.

Несколько раз приходилось сталкиваться с работой с изображениями в windows и всегда решения оказывались мягко сказать нетривиальными, последняя история - конвертация значков файлов и папок windows, которые создаются через COM средствами ОС, в формат с прозрачностью, который можно сохранить как кэш, который будет занимать минимальное место на диске. Нашлось только одно решение - сохранять через GDI+ в png. Чтобы отыскать это решение и убедится, что ничего больше нет без использования сторонних библиотек я потратил двое суток, и сутки на реализацию. Поэтому меня лучше не спрашивать о графических форматах, мне тяжело их касаться. Формат BMP очень хорошо описан и поддерживается в winapi на самом низком уровне, по этому есть все шансы изучить и использовать эти возможности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2015, 02:30
Помогаю со студенческими работами здесь

Получить RGB bmp файла
Всем привет. Стоит задача получить массив пикселей с помощью Bitmap Я нуб в этом, но написал что то типа: #if...

BMP, получить массив пикселей
Добрый день. Пишу дипломную работу, требуется помощь с программой. У меня есть изображение bmp. Мне из него нужно получить массив пикселей,...

Получить из файла BMP матрицу значений пикселов
уважаемые программисты никак не могу справиться со следующей задачей. мне необходимо получить из bmp файла значение его пикселов в виде...

Чтение bmp файла в байт массив и обратно
Проблема состоит в том что я считываю в байт масив к примеру текстовый файл и потом востанавливаю все работает, но когда я считываю bmp...

Записать в массив RGB-цвета bmp-файла
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main() { unsigned char x; ifstream...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru