GDIというか、CreateDIBSectionで32ビットのDIBを作成して、そこのバッファ(LPDWORD lpPixel)に
書き込んでいます。
なので、DIBSectionなので、GDIでも自前描画クラスでもピクセルバッファに書き込めるのですが、
あえて、自前描画クラスで書き込んでいます。
クラスは、下のような感じです。
//描画用クラス
class CDraw{
private:
int width;
int height;
struct BufStr buff[MAXSIZE]; /* シード登録用バッファ */
struct BufStr *sIdx, *eIdx; /* buffの先頭・末尾ポインタ */
public:
int OldPointX;
int OldPointY;
int DrawMode;
int DrawCount;
public:
CDraw()
{
//(コンストラクタ)特に無し
}
CDraw(int xwidth,int yheight)
{
width=xwidth;
height=yheight;
}
~CDraw()
{
//(デストラクタ)特に無し
}
int GetPoint(int x,int y)
{
if(x<0 || x>width) return 0;
if(y<0 || y>height) return 0;
if(y==0) y=1;
int p=lpPixel[x+(480-y)*width];
int a,r,g,b;
a = (p>>24&0xFF);
r = ((p>>16)&0xFF);
g = ((p>>8)&0xFF);
b = (p&0xFF);
int Col2 = (b<<16) | (g<<8) | r | 0xff000000;
return Col2;
}
void DrawPixel(int x,int y,int Col)
{
int a,r,g,b;
a = (Col>>24&0xFF);
r = ((Col>>16)&0xFF);
g = ((Col>>8)&0xFF);
b = (Col&0xFF);
int Col2 = (b<<16) | (g<<8) | r | 0xff000000;
if(x<0 || x>width) return;
if(y<0 || y>height) return;
if(y==0) y=1;
lpPixel[x + (480-y) * width] = Col2;
}
void ColorDivide(int Col,int *r,int *g,int *b)
{
*r=((Col>>16)&0xFF);
*g=((Col>>8)&0xFF);
*b=(Col&0xFF);
}
void DrawRect(int x0,int y0,int x1,int y1,int Col)
{
int i,j;//矩形を描画するメンバ関数
for(i=x0;i<x1;i++)
{
for(j=y0;j<y1;j++)
{
DrawPixel(i,j,Col);
}
}
}
void DrawLine(int x0,int y0,int x1,int y1,int Col)
{
int i;//線を描画するメンバ関数
int dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1;
int dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1;
int sx = ( x1 > x0 ) ? 1 : -1;
int sy = ( y1 > y0 ) ? 1 : -1;
/* 傾きが1以下の場合 */
if( dx >= dy )
{
int E = -dx;
for( i = 0 ; i <= dx ; i++ )
{
DrawPixel(x0,y0,Col);
x0 += sx;
E += 2 * dy;
if( E >= 0 )
{
y0 += sy;
E -= 2 * dx;
}
}
/* 傾きが1より大きい場合 */
} else
{
int E = -dy;
for( i = 0 ; i <= dy ; i++ )
{
DrawPixel(x0,y0,Col);
y0 += sy;
E += 2 * dx;
if( E >= 0 )
{
x0 += sx;
E -= 2 * dy;
}
}
}
}
void DrawCircle(int mx,int my,int r,int Col)
{
int sx=mx-r;
int sy=my-r;
int dx=mx+r;
int dy=my+r;
int x,y;
for(y=sy;y<=dy;y++)
{
for(x=sx;x<=dx;x++)
{
//円の範囲内?
if( (x-mx)*(x-mx)+(y-my)*(y-my)<=r*r)
{
DrawPixel(x,y,Col);
}
}
}
}
};