各位大佬
有段代码我用在320*240的分辨率下非常好用,可是到了640*480的屏幕,输出的画面就变成两个了。不知道是什么问题,请各位看看
这是初始化函数
struct ezfb {
HRESULT res_handle ; // direct draw api result
LPDIRECTDRAW dd_ptr ; // direct draw object ptr
DDSURFACEDESC dds_desc ; // direct draw surface desc obj
LPDIRECTDRAWSURFACE dds_ptr ; // direct draw surface ptr
u_short* vga_ptr ; // points to frame buffer of screen
u_int scr_width ;
u_int scr_height ;
u_int scr_bpp ;
};
int ezfb_init(struct ezfb* fb, HWND wnd_handle)
{
DDCAPS dd_caps ;
DDCAPS dd_hel_caps ;
// init fb value
fb->vga_ptr = NULL ;
fb->dd_ptr = NULL ;
fb->dds_ptr = NULL ;
fb->scr_width = 0 ;
fb->scr_height = 0 ;
fb->scr_bpp = 0 ;
// create direct draw object
fb->res_handle = DirectDrawCreate(NULL, &(fb->dd_ptr), NULL);
if (fb->res_handle != DD_OK)
return EZFB_FAIL_CREATE_DD ;
// Get exclusive mode
fb->res_handle = (fb->dd_ptr)->SetCooperativeLevel(wnd_handle, DDSCL_FULLSCREEN);
if (fb->res_handle != DD_OK)
return EZFB_FAIL_SET_FULLSCREEN ;
// make sure the direct draw is valid
(fb->dd_ptr)->GetCaps(&dd_caps, &dd_hel_caps) ;
if (!(dd_caps.ddsCaps.dwCaps & DDSCAPS_VALID))
return EZFB_FAIL_GET_DD_INFO ;
// create the main framebuffer surface
memset(&(fb->dds_desc), 0, sizeof(fb->dds_desc)) ;
(fb->dds_desc).dwSize = sizeof(fb->dds_desc) ;
(fb->dds_desc).dwFlags = DDSD_CAPS ;
(fb->dds_desc).ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE ;
fb->res_handle = (fb->dd_ptr)->CreateSurface(&(fb->dds_desc), &(fb->dds_ptr), NULL) ;
if (fb->res_handle != DD_OK)
return EZFB_FAIL_CREATE_DDS ;
if(EZFB_LOCK(fb) != DD_OK) return EZFB_FALSE ;
// save screen necessary params
fb->scr_bpp = fb->dds_desc.ddpfPixelFormat.dwRGBBitCount ;
EZFB_MAP(fb) ;
EZFB_UNLOCK(fb) ;
return EZFB_TRUE ;
}
然后以后的代码直接把画面内容写入(fb->dds_ptr)即可在屏幕上显示图像了。
在VGA的尺寸下,图像是2个缩得非常小的画面,而在QVGA尺寸下,图像很正常。请教各位大佬。
你的图片是320*240,而framebuffer是640*480,如果按像素写应该不对。
你可以把图片居中写入试试
或者把图片放大两倍显示,最简单就是4个framebuffer的点对应图片一个点
这个问题我碰到过
1.首先你要了解你的摄像头输出地源图像是多少,也就是从摄像头你能得到多大的图像,这个一般在头文件里有设置。 如,你的摄像头输出640*480的 那么设置如下
#define CAM_SRC_HSIZE (640)
#define CAM_SRC_VSIZE (480)
这只是个例子,你的源图片文件名称也许不是这样。如果你的摄像头是130万像素,也就是可以支持1280*1024的话 源图像也有可能是这个 ,你要好好查查。
2.其次,要确定你要预览的图像大小,也就是你要预览多大的图像,按照你说的图像应该是640*480的VGA。
3.最后,也是最重要的一点就是你如何把你采集到图像显示到LCD上的。如果是直接把图像考到lcd的buffer上的话是有一个公式的,并不是考到上面就行。这个公式如果弄错就会出现2个图像。
这个情况我也遇到过,不用急,很快就会挑好的