// 1.
GBUF_STRUCT * gbuf = GBuf_Create(640,480,GF_DEFAULT);
// 2.
GBuf_LoadImage(gbuf,"bitmap.bmp",0);
// 3.
GBuf_LoadAlpha(gbuf,"alpha.bmp",0);
BOOL WINAPI GBuf_LoadAlpha(GBUF_STRUCT *dst,LPSTR filename,DWORD flags)
{
// ファイルの読み込み、bufに格納する
HANDLE handle = CreateFile_Read(filename);
if(handle == INVALID_HANDLE_VALUE)return FALSE;
DWORD size = GetFileSize(handle,NULL),readsize = 0;
LPBYTE buf = (LPBYTE)Malloc(size);
ReadFile(handle,buf,size,&readsize,NULL);
CloseHandle(handle);
if(size != readsize)return FALSE;
// BITMAP
if(memcmp(buf,"BM",2) == 0){
LPBITMAPFILEHEADER fh = (LPBITMAPFILEHEADER)buf;
LPBITMAPINFOHEADER ih = (LPBITMAPINFOHEADER)(buf + sizeof(BITMAPFILEHEADER));
LPBYTE bits = (LPBYTE)(buf + fh->bfOffBits),input,winput;
G_PIXEL *output = GBuf_GetPtr(dst),*woutput = output;
int x = 0,y = 0;
int ex = (ih->biWidth < dst->width ) ? ih->biWidth : dst->width ;
int ey = (ih->biHeight < dst->height) ? ih->biHeight : dst->height;
LONG pitch = (LONG)((ih->biWidth * 3 + 3) & 0xfffffffc);
if(ih->biBitCount != 24){
Free(buf);
return FALSE;
}
input = winput = bits + (pitch * (ih->biHeight - 1));
while(y < ey){
while(x < ex){
woutput->pixel.alpha = winput[0];
winput += 3;
woutput++;
x++;
}
woutput = (output += dst->pitch);
winput = (input -= pitch);
x = 0;
y++;
}
Free(buf);
dst->flags |= GF_ALPHA;
return TRUE;
}
Free(buf);
return FALSE;
}