С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/43: Рейтинг темы: голосов - 43, средняя оценка - 4.65
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34

Цвет пикселя HBITMAP по координатам

09.07.2011, 18:06. Показов 8187. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть HBITMAP . Как узнать цвет пикселя в формате RGB для координат X , Y.
Можно пример кода пожалуйста?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2011, 18:06
Ответы с готовыми решениями:

Как получить цвет точки из HBITMAP
Как связать HBITMAP и GetPixel()/SetPixel? Мне нужно сделать фильтры для изображения, а я не знаю как на WinAPI получить цвета пикселей из...

Рисование битмапов: (HBITMAP)SelectObject(hMemDC, hBitmap) выдаёт ошибку
Использовал пример из книг Фроловых "Библиотека системного программиста" рисование битовых изображений в формате DDB. Загрузил битмап из...

Получить цвет пикселя
Имеется указатель на массив битов, полученный, например, функцией GetDIBits. Собственно вопрос: как из этого массива получить RGB пикселя с...

5
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
09.07.2011, 19:19
Для одного пикселя можно так
Delphi
1
2
3
4
5
6
7
var
  DC,rgb: dword;
begin
  DC:=CreateCompatibleDC(Image1.Canvas.Handle);
  SelectObject(DC,Image1.Picture.Bitmap.Handle);
  rgb:=GetPixel(DC,x,y);
end;
Чтобы получить весь растр используй GetBitmapBits.
1
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34
10.07.2011, 11:44  [ТС]
Спасибо , помогло

Добавлено через 15 часов 27 минут
есть 2 файла .bmp. один весит 3200 Кб, второй 1 кб. второй это вырезка из первого.
открываю файлы таким кодом:
C++
1
2
3
4
5
6
HDC filedc= CreateCompatibleDC(NULL);
    HDC wnddc= CreateCompatibleDC(NULL);
    HBITMAP wndbitmap = (HBITMAP) LoadImage(NULL, filename1, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE| LR_DEFAULTSIZE|LR_VGACOLOR);
    HBITMAP filebitmap = (HBITMAP) LoadImage(NULL, filename , IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE| LR_DEFAULTSIZE|LR_VGACOLOR);
    SelectObject(filedc,filebitmap);
    SelectObject(wnddc,wndbitmap);
считываю RGB цвета пиксилей с малого файла коректно, но с большего файла они считываются искаженными. Подскажите пожалуйста где ошибка. Получаю RGB пиксилей :
C++
1
2
3
4
COLORREF bigg = GetPixel(wnddc,x,y);
int r1= GetRValue(bigg);
            int g1 = GetGValue(bigg);
            int b1 = GetBValue(bigg);
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
10.07.2011, 15:44
Убрать флаги LR_VGACOLOR и LR_DEFAULTSIZE. Только LR_LOADFROMFILE.
А еще используем GDI+ и не ограничиваемся BMP Image.Image(WCHAR, BOOL) Constructor, Image.FromFile Method.
И вот еще HOWTO: How To Use LoadImage() to Read a BMP File
1
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34
10.07.2011, 17:22  [ТС]
спс, сделал так
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
81
82
83
84
85
86
87
88
#include "stdafx.h"
#define _AFXDLL
#include <afxwin.h>
 
#include <iostream>
#include <GdiPlus.h>
//
//#pragma comment (lib, "GDIPlus.lib")
//using namespace std;
using namespace Gdiplus;
 
  BOOL LoadBitmapFromBMPFile( LPTSTR szFileName, HBITMAP *phBitmap,
   HPALETTE *phPalette )
   {
 
   BITMAP  bm;
 
   *phBitmap = NULL;
   *phPalette = NULL;
 
   // Use LoadImage() to get the image loaded into a DIBSection
   *phBitmap = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
   if( *phBitmap == NULL )
     return FALSE;
 
   // Get the color depth of the DIBSection
   GetObject(*phBitmap, sizeof(BITMAP), &bm );
   // If the DIBSection is 256 color or less, it has a color table
   if( ( bm.bmBitsPixel * bm.bmPlanes ) <= 8 )
   {
   HDC           hMemDC;
   HBITMAP       hOldBitmap;
   RGBQUAD       rgb[256];
   LPLOGPALETTE  pLogPal;
   WORD          i;
 
   // Create a memory DC and select the DIBSection into it
   hMemDC = CreateCompatibleDC( NULL );
   hOldBitmap = (HBITMAP)SelectObject( hMemDC, *phBitmap );
   // Get the DIBSection's color table
   GetDIBColorTable( hMemDC, 0, 256, rgb );
   // Create a palette from the color tabl
   pLogPal = (LOGPALETTE *)malloc( sizeof(LOGPALETTE) + (256*sizeof(PALETTEENTRY)) );
   pLogPal->palVersion = 0x300;
   pLogPal->palNumEntries = 256;
   for(i=0;i<256;i++)
   {
     pLogPal->palPalEntry[i].peRed = rgb[i].rgbRed;
     pLogPal->palPalEntry[i].peGreen = rgb[i].rgbGreen;
     pLogPal->palPalEntry[i].peBlue = rgb[i].rgbBlue;
     pLogPal->palPalEntry[i].peFlags = 0;
   }
   *phPalette = CreatePalette( pLogPal );
   // Clean up
   free( pLogPal );
   SelectObject( hMemDC, hOldBitmap );
   DeleteDC( hMemDC );
   }
   else   // It has no color table, so use a halftone palette
   {
   HDC    hRefDC;
 
   hRefDC = GetDC( NULL );
   *phPalette = CreateHalftonePalette( hRefDC );
   ReleaseDC( NULL, hRefDC );
   }
   return TRUE;
 
   }
                
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    HBITMAP bmap;
    HPALETTE pal;
    CPalette  p1;
    LoadBitmapFromBMPFile(L"integra.bmp",&bmap,&pal);
    HDC filedc= CreateCompatibleDC(NULL);
    SelectObject(filedc,bmap);
    COLORREF color = GetPixel(filedc,777,258);
    int r2= GetRValue(color);
            int g2 = GetGValue(color);
            int b2 = GetBValue(color);
            std::cout << r2<<" "<< g2<<" "<<b2;
    return 0;
}
все цвета считало правильно.
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
10.07.2011, 18:55
GDI+
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
/*
Подключаемые заголовки в stdafx.h
#include <tchar.h>
#include <windows.h>
#include <gdiplus.h>
#include <iostream>
*/
#include "stdafx.h"
 
#pragma comment(lib, "gdiplus.lib")
 
int _tmain(int argc, _TCHAR* argv[])
{
    // Инициализация GDI+.
    Gdiplus::GdiplusStartupInput input;
    Gdiplus::GdiplusStartupOutput output;
    ULONG_PTR token;
    Gdiplus::GdiplusStartup(&token, &input, &output);
 
    Gdiplus::Color color;
    Gdiplus::Bitmap* bitmap;
 
    bitmap = new Gdiplus::Bitmap(L"picture.bmp");
    bitmap->GetPixel(50, 50, &color);
    delete bitmap;
    std::cout << "BMP: " << (unsigned)color.GetRed() << " " << (unsigned)color.GetGreen() << " " << (unsigned)color.GetBlue() << std::endl;
 
    bitmap = new Gdiplus::Bitmap(L"picture.png");
    bitmap->GetPixel(50, 50, &color);
    delete bitmap;
    std::cout << "PNG: " << (unsigned)color.GetRed() << " " << (unsigned)color.GetGreen() << " " << (unsigned)color.GetBlue() << std::endl;
 
    bitmap = new Gdiplus::Bitmap(L"picture.jpg");
    bitmap->GetPixel(50, 50, &color);
    delete bitmap;
    std::cout << "JPG: " << (unsigned)color.GetRed() << " " << (unsigned)color.GetGreen() << " " << (unsigned)color.GetBlue() << std::endl;
 
    bitmap = new Gdiplus::Bitmap(L"picture.gif");
    bitmap->GetPixel(50, 50, &color);
    delete bitmap;
    std::cout << "GIF: " << (unsigned)color.GetRed() << " " << (unsigned)color.GetGreen() << " " << (unsigned)color.GetBlue() << std::endl;
 
    // Деинициализация GDI+.
    Gdiplus::GdiplusShutdown(token);
 
    _tsystem(_T("PAUSE"));
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2011, 18:55
Помогаю со студенческими работами здесь

Вытащить цвет пикселя из битмапа
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN); int nScreenHeight = GetSystemMetrics(SM_CYSCREEN); HWND hDesktopWnd =...

Как получить цвет пикселя?
Его координаты у меня есть

GetPixel неправильно определяет цвет пикселя
Господа такая ситуация - я нарисовал в своём окне линию красного цвета , затем при помощи GetPixel пытаюсь определить какого цвета пиксел ,...

Возможно ли без помощи GDI изменить цвет пикселя
Возможно ли без помощи Graphics Device Interface изменить цвет, установить пиксель и рисовать?

Определить цвет пикселя в окне, которое закрыто другим
Ситуация такая, есть окно я в нем делаю проверку на определенных координатах цвет пикселя. Но когда окно закрыть поверх другим окном то...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru