Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lNORDl
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 44
#1

Получение цветов GetBitmapBits() - C++

27.03.2014, 20:39. Просмотров 661. Ответов 1
Метки нет (Все метки)

Здравствуйте: Мне надо получить иконку и сохранить ее в качестве массива пикселей, иконку я получил:
C++
1
2
3
4
5
6
7
8
        SHFILEINFO fileInfo;
        SHGetFileInfo(L"C:\\Users\\Daniil\\Desktop", 0, &fileInfo, sizeof(SHFILEINFO), SHGFI_ICON);
 
        ICONINFO iconInfo;
        GetIconInfo(fileInfo.hIcon, &iconInfo);
        HICON icon = fileInfo.hIcon;;
        byte b[1600];       
        GetBitmapBits(iconInfo.hbmColor, 20 * 20, b);
А вот как распарсить теперь b?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 20:39     Получение цветов GetBitmapBits()
Посмотрите здесь:

Преобразование цветов - C++
Есть массив байтов 3 на 256 такого вида: 0,0,0 1,1,1 2,2,2 .... 255,255,255 Т.е. он представляет собой палитру RGB из черного...

Массив цветов - C++
как записать в массив какой нибудь цвет ?

Строки разных цветов - C++
Помогите разобраться с цветом в консольном приложении. Задача может оказаться довольно проста для вас, но, я , что то упорно не вижу ответа...

Задача: Покупка цветов - C++
Помогите решить задачу На День учителя Вася решил купить букет цветов. В магазине продаются ромашки по A рублей за штуку и гладиолусы...

вертикальные линий разных цветов - C++
Вывести в ряд 10 вертикальных линий разных цветов, используя оператор gotoxy. Помогите пожалуйста.А то у меня это задание вообще не...

Раскрасить карту минимальным количеством цветов - C++
Задача раскраски карты. Страны на карте заданы матрицей смежности. Если страны i,j имеют на карте общую границу, то элемент матрицы A равен...

Генератор случайных цветов для Формы - C++
Суть такова , при нажатии на кнопку мыши менялся цвет BackGround PictureBox. Помогите пожалуйста

Неправильное считываение цветов пикселе в BMP - C++
Вот, собственно, программа: #include <iostream> #include <fstream> #include <cmath> #include <cstdio> #include <windows.h> ...

Определить необходимое конечное множество цветов и оттенков - C++
Входные данные: цветовая гамма Выходные данные: -RGB; -HSV; -нечеткое наименование. Хочу сделать на Visual Studio 2013 C++....

Как сделать текст на консоли двух цветов? - C++
Подскажите как сделать так, чтобы текст в консоли сделать двух цветов ? К примеру вот код: system("color C"); cout <<...

Как сделать разные символы разных цветов [C++] - C++
Здраствуйте! Мне нужно, чтобы на экран выводились символы разных цветов. Отрывок из кода : tt: switch(color) { case...

Графическое приложение WinAPI. Как регулировать насыщенность цветов? - C++
Уважаемые форумчане помогите доработать графическое приложение. В общем смысл в чем: В программе, при помощи клавиш 1, 2, 3, 4, 5, 6...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lNORDl
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 44
29.03.2014, 23:58  [ТС]     Получение цветов GetBitmapBits() #2
Самому не вериться но я это сделал, получаем иконку по заданному пути и извлекаем пиксели:

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
    SHFILEINFO fileInfo;
        LPCWSTR path = L"Ваш путь...";
    SHGetFileInfo(path, 0, &fileInfo, sizeof(SHFILEINFO), SHGFI_ICON);
 
    ICONINFO iconInfo;
    GetIconInfo(fileInfo.hIcon, &iconInfo);
 
    HDC hdcSource = GetDC(windowHandle); 
    HBITMAP hSource = iconInfo.hbmColor;
 
    BITMAPINFO MyBMInfo = { 0 };
    MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader);
 
    if (0 == GetDIBits(hdcSource, hSource, 0, 0, NULL, &MyBMInfo, DIB_RGB_COLORS))
    {
        
    }
 
    BYTE* lpPixels = new BYTE[MyBMInfo.bmiHeader.biSizeImage];
 
    MyBMInfo.bmiHeader.biBitCount = 32;
    MyBMInfo.bmiHeader.biCompression = BI_RGB;  // no compression -> easier to use
    
    MyBMInfo.bmiHeader.biHeight = abs(MyBMInfo.bmiHeader.biHeight);
 
    if (0 == GetDIBits(hdcSource, hSource, 0, MyBMInfo.bmiHeader.biHeight, lpPixels, &MyBMInfo, DIB_RGB_COLORS))
    {
 
    }
 
    std::vector<hgeColorRGB*> matrix;
    int MATRIX_WIDTH;
    int MATRIX_HEIGHT;
 
    MATRIX_WIDTH = MyBMInfo.bmiHeader.biWidth;
    MATRIX_HEIGHT = MyBMInfo.bmiHeader.biHeight;
    matrix.resize(MATRIX_HEIGHT*MATRIX_WIDTH);
    for (int i = 0; i < MATRIX_HEIGHT*MATRIX_WIDTH; i++) matrix[i] = NULL;
 
    float r;
    float b;
    float g;
    float a;
    int l = MATRIX_HEIGHT*MATRIX_WIDTH * 4;
    int p = MATRIX_HEIGHT*MATRIX_WIDTH-1;
    //int p = 0;
    for (int i = 0; i < l; i += 4)
    {
        int n = i;
        g = (float)lpPixels[n] / (float)255;
        b = (float)lpPixels[n + 1] / (float)255;
        r = (float)lpPixels[n + 2] / (float)255;
        a = (float)lpPixels[n + 3] / (float)255;
 
        matrix[p] = new hgeColorRGB(r, b, g, a);
        p--;
    }
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru