Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   как узнать цвет точки в с++ ? (http://forum.oszone.net/showthread.php?t=142538)

Turman 13-06-2009 00:48 1142052

как узнать цвет точки в с++ ?
 
пытаюсь написать простенькую игрушку на visual с++ с использованием win api.
подскажите, а как узнать цвет точки с заданными координатами x,y?

Цитата:

это кусок программки- чтобы както обозначить поле деятельности)
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS w;

pva 13-06-2009 13:37 1142257

Цвет точки на экране (DC) можно узнать функцией GetPixel, но для игрушки (где требуется быстродействие) я бы это не рекомендовал. Лучше держать самому в памяти картинку и брать цвет точки - элемент матрицы, содержащей пиксели (для 8-битного рисунка 1 пиксель - 1 байт). Картинку можно периодически копировать на экран функцией SetDIBitsToDevice. Заодним, если требуется длительная прорисовка, это всё будет работать как двойная буфферизация графики.

Turman 15-06-2009 00:49 1143336

спасибо большое- с оптимизацией графики очень полезное сообщение- а то все мерцает..! попробую разобраться с картинкой..
пока только начинаю с этим знакомиться. и картинки надо еще научиться инициализировать и правильно коды цветов задавать и вообще с ними работать...
пс
нашел программу -фейверк. на применение этого метода.
https://www.planet-source-code.com/v...=6331&lngWId=3

если кто-нибудь найдет еще примеры простенькие- скиньте ссылки, сил вупле :)

pva 23-06-2009 11:49 1149651

пример с двойной буфферизацией: http://forum.oszone.net/thread-141528.html
в 8-битром рисунке коды цветов программируются в палитре. Структура BITMAPINFO должна быть дополнена массивом из 256 DWORD-ов, которые задают цвет (RGB). Индекс в массиве соответствует коду цвета на картинке.

VtaMC 26-06-2009 09:46 1152079

Для Visual не знаю, если чем поможет, то:

C++ Builder: GetPixel(Canvas->Handle,x,y);

Либо по каналам:
TColor c1, c2, c3;
c1 = getRValue(GetPixel(Canvas->Handle,x,y));
c2 = getGValue(GetPixel(Canvas->Handle,x,y));
c3 = getBValue(GetPixel(Canvas->Handle,x,y));


Время: 16:16.

Время: 16:16.
© OSzone.net 2001-