Bibliothek zum setzen von Pixeln gesucht...
-
Ich bräuchte eine eine einfache Bibliothek, die in etwa so funktioniert:
int main(int argc,char** argv) { lib::window w(argc,argv,400,300); //400/300=Breite/Höhe w[x][y]=rgb_color(0,1,0); //grün window.show(); };
Mir liegt auch ne Menge daran, das so einfach zu halten...
-
SDL?
-
Ich hab mir das jetzt mal zusammenkopiert, aber das Bild bleibt schwarz...
#include <SDL/SDL.h> #include <iostream> #include <cstdlib> void DrawPixel(SDL_Surface *screen, int x, int y,Uint8 R, Uint8 G,Uint8 B) { using namespace std; Uint32 color = SDL_MapRGB(screen->format, R, G, B); if ( SDL_MUSTLOCK(screen) ) { if ( SDL_LockSurface(screen) < 0 ) { return; } } switch (screen->format->BytesPerPixel) { case 1: { /* vermutlich 8 Bit */ Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x; *bufp = color; } break; case 2: { /* vermutlich 15 Bit oder 16 Bit */ Uint16 *bufp; bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x; *bufp = color; } break; case 3: { /* langsamer 24-Bit-Modus, selten verwendet */ Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3; if(SDL_BYTEORDER == SDL_LIL_ENDIAN) { bufp[0] = color; bufp[1] = color >> 8; bufp[2] = color >> 16; } else { bufp[2] = color; bufp[1] = color >> 8; bufp[0] = color >> 16; } } break; case 4: { /* vermutlich 32 Bit */ Uint32 *bufp; bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x; *bufp = color; } break; } if ( SDL_MUSTLOCK(screen) ) { SDL_UnlockSurface(screen); } } int main() { if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { std::cerr<< "SDL konnte nicht initialisiert werden: \n"<<SDL_GetError()<<std::flush; return 1; } SDL_Surface *display; display = SDL_SetVideoMode( 800, 600, 16, SDL_SWSURFACE ); if ( display == NULL ) { std::cerr << "Es Konnte kein Fenster der Groeße 800x600 mit einer Farbtiefe von 16 bit erstellt werden: \n" <<SDL_GetError()<<std::flush; return 2; } for(int i=0,j; i<display->w;++i) for(j=0;j<display->h;++j) DrawPixel(display,i,j,255,255,255); //WEIß std::cin.get(); SDL_Quit(); return 0; }
-
SDL_Flip oder UpdateRect aufrufen
-
Nicht ganz so einfach aber nah dran:
#include <qlabel.h> #include <qpixmap.h> #include <qapplication.h> #include <qpainter.h> int main(int argc, char ** argv) { QApplication a( argc, argv ); QLabel label(NULL); label.setPixmap(QPixmap(400,300)); QPainter p(label.pixmap()); p.setPen(QColor(0,255,0)); p.drawPoint(100,200); a.setMainWidget( &label ); label.show(); return a.exec(); }
-
@Dr...: danke, das wars...
@ponto: ne danke, qt :p (nicht so ernst nehmen...)
-
ness schrieb:
@ponto: ne danke, qt :p (nicht so ernst nehmen...)
Irgendwie scheint mir der qt Code näher an der Zielvorstelung eines einfachen Programms zu sein als das SDL Zeug. Aber wenn man qt nicht mag, soll es auch ok sein.
-
Ponto schrieb:
Irgendwie scheint mir der qt Code näher an der Zielvorstelung eines einfachen Programms zu sein als das SDL Zeug. Aber wenn man qt nicht mag, soll es auch ok sein.
Ja, SDL ist sehr lowlevel. Wobei Qt natürlich auch nicht das einzige Toolkit ist, mit dem das einfacher geht
Aber wenn die Lösung so okay ist, warum nicht?
-
Magick++ dürfte sowas recht schön können.
(Auch wenn es teilweise etwas gewöhnungsbedürftig ist.)