Как делать пиксельные манипуляции в C ++? - Linux - PullRequest
0 голосов
/ 18 января 2020

Моя цель:

Я бы хотел независимо манипулировать цветом пикселей созданного окна, как растровое изображение. Я бы предпочел нативную библиотеку для Ubuntu -> Linux. Он может работать с такой функцией, как:

SetPixel(int x,int y,int Color) {

  //Some code that set the color of one pixel by his coordinates x and y

  return 0;//May return an error
}

Он устанавливает цвет пикселя в окне по его положению

Проблемы:

Я уже много пробовал учебные пособия (которые используют Graphics.h или Windows .h) , но ни один из них не работал на моем компьютере, Я могу что-то сделать не так но то, что я нашел не является явным. Во всяком случае, Я бы не знал, как скачать библиотеку без инструкций. Я считаю, что он не работает на Linux.

SDL2 не является родным для Linux. кстати

Если требуется какое-либо разъяснение, пожалуйста, добавьте комментарий или предложите изменить

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Вы должны изучить SDL2. Это довольно легко выучить, и я рекомендую вам прочитать эти статьи, они являются отличным и полным учебником.

http://lazyfoo.net/tutorials/SDL/index.php

То, что вам нужно в специальном, доступно в этом: http://lazyfoo.net/tutorials/SDL/08_geometry_rendering/index.php

Только для показа Вы функции:

SDL_RenderSetDrawColor( myRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderDrawPoint( myRenderer, cordX, cordY);

Таким образом, вы можете выбрать цвет и изменить пиксели независимо

PS: Это работает на Ubuntu, статьи научат вас, как настроить все, что вам нужно , PS2: Если вам нужна помощь, свяжитесь со мной, моя ОС также Ubuntu.

0 голосов
/ 10 марта 2020

Для меня простое решение, похожее на приведенный ниже код

#include <X11/Xlib>
bool SetPixel(uint16_t X,uint16_t Y,uint32_t Color){
    XSetForeground(_Display,_GraphicCTX,Color);
    XDrawPoint(_Display,_Window,_GraphicCTX,X,Y);
    return true;
}

bool Setup(){ //Use it first to make every graphical manipulations working :)
    Display=XOpenDisplay(0);//Create a display
    Window=XCreateSimpleWindow(Display,DefaultRootWindow(Display),0,0,480,360,0,0,0);   //Create a Window
    XMapWindow(Display,Window);//Make the Window visible
    GraphicCTX=XCreateGC(Display,Window,0,NIL);//Create a Graphics Context
    //v Wait for a MapNotify XEvent for next commands
    XSelectInput(Display,Window,StructureNotifyMask);
    while(1){
        XEvent E;
        XNextEvent(Display,&E);
        if(E.type==MapNotify)break;
    }
    return true;
}

Я использовал X11, поскольку это собственный графический протокол Linux.

Фактически я сделал библиотека для упрощения работы с классом.

Функция установки должна запускаться перед любыми графическими операциями, иначе она ничего не сделает!

Это может работать, но для продвинутой разработки , вам нужно играть с изображениями и многое другое! Существует очень большое руководство для Xlib !

...