I like to create “animations” in C ++, such as the MandelBrot Set scaling device, the Game of Life simulator, etc., setting pixels directly onto the screen frame by frame. The SetPixel () command makes this incredibly simple, although unfortunately it is also very slow. Here is the setting that I use for each frame if I wanted to draw a full screen with the contents of the R array:
#include <windows.h> using namespace std; int main() { int xres = 1366; int yres = 768; char *R = new char [xres*yres*3]; /* R is a char array containing the RGB value of each pixel sequentially Arithmetic operations done to each element of R here */ HWND window; HDC dc; window = GetActiveWindow(); dc = GetDC(window); for (int j=0 ; j<yres ; j++) for (int i=0 ; i<xres ; i++) SetPixel(dc,i,j,RGB(R[j*xres+3*i],R[j*xres+3*i+1],R[j*xres+3*i+2])); delete [] R; return 0; }
On my machine, it takes almost 5 seconds to execute for the obvious reason that SetPixel () is called more than a million times. The best scenario for the case, I could make it work 100 times faster and get a smooth animation of 20 frames per second.
I heard that converting R to a raster file in some way and then using BitBlt to display the frame in one clean command is the way to go, but I don’t know how to implement this for my installation, and I really appreciate the help.
If relevant, I launch Windows 7 and use Code :: Blocks as my IDE.
c ++ windows pixel animation bitmap
Can_of_awe
source share