构
CString strFilename,str;
CFileDialog openBox(TRUE,NULL,_T(""),OFN_HIDEREADONLY,_T("bmp(*.bmp)|*.bmp|ALLFiles(*.*)|*.*||"),NULL);
openBox.m_ofn.lpstrTitle=_T("打开数据文件640*480_bmp");
INT_PTR nResult = openBox.DoModal();
// 如果文件打开则准备播放
if (nResult == IDOK)
{
strFilename=openBox.GetPathName();
}
else
{
return;
}
strFilename.ReleaseBuffer();
str =strFilename;
m_hBitmap = (HBITMAP)::LoadImage(NULL,str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); //装载位图
if(m_bitmap.m_hObject)
m_bitmap.DeleteObject();
m_bitmap.Attach(m_hBitmap);//将句柄与CBitmap关联起来
m_bitmap.GetBitmap(&bm);
int height = bm.bmHeight;//图像的宽高
int width = bm.bmWidth;
int widthBytes=bm.bmWidthBytes;//图像一行数据所占的字节数
int size=height*widthBytes;
buf[i]=new BYTE[size];
m_bitmap.GetBitmapBits(size,buf[i]);//得到RGB数据
}
}
#include
#pragma comment (lib,"ddraw.lib")
#pragma comment (lib,"dxguid.lib")
LPDIRECTDRAW lpdd=NULL;
LPDIRECTDRAW7 lpdd7=NULL;
LPDIRECTDRAWSURFACE7 lpddsback;
LPDIRECTDRAWSURFACE7 lpddsprimary=NULL;
LPDIRECTDRAWSURFACE7 lpddsmypage[6];
LPDIRECTDRAWPALETTE lpddpal=NULL;
DDSURFACEDESC2 ddsd;
LPDIRECTDRAWCLIPPER lpDDClipper = NULL;
//
#define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
//#define SCREEN_WIDTH 640
//#define SCREEN_HEIGHT 480
RECT rcRectSrc;
RECT rcRectDest;
int index_y = 0, index_x = 0;
int height,width,widthBytes;
int R, G, B;
int SCREEN_WIDTH,SCREEN_HEIGHT;
HWND main_window_handle;
void CshowpicDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
height=width=widthBytes=0;
main_window_handle = m_screen.GetSafeHwnd();
if(DD_OK!=(DirectDrawCreate(NULL, &lpdd, NULL)))
{
return ;
}
//获取DIRECTDRAW7 接口
if(DD_OK != (lpdd->QueryInterface(IID_IDirectDraw7,(LPVOID*)&lpdd7)))
{
return ;
}
// set the cooperative level for full-screen mode
if(DD_OK != lpdd7->SetCooperativeLevel(main_window_handle, DDSCL_NORMAL))
{
return ;
}
// set the display mode to 640x480x256
#if 0 //设置分辨率
if(DD_OK!=(lpdd7->SetDisplayMode(800,600,32,0,0)))
{
AfxMessageBox("dsf");
return ;
}
#endif
// clear ddsd and set size
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
// enable valid fields
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
// create the primary surface
/*
ddsd.ddsCaps.dwCaps=DDSCAPS_BACKBUFFER;
if (FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps,&lpddsback)))
{
return -1;
}
*/
if(DD_OK!=(lpdd7->CreateSurface(&ddsd, &lpddsprimary, NULL)))
{
return ;
}
// 创建裁剪器
if (FAILED(lpdd7->CreateClipper(0, &lpDDClipper, NULL)))
return ;
// 与窗口工作区关联
if (FAILED(lpDDClipper->SetHWnd(0, main_window_handle)))
{
lpDDClipper->Release();
return ;
}
if (FAILED(lpddsprimary->SetClipper(lpDDClipper)))
{
lpDDClipper->Release();
return ;
}
{
SCREEN_WIDTH = 640 ;SCREEN_HEIGHT = 480;
}
//
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DD