// TODO: 在此添加控件通知处理程序代码

 height=width=widthBytes=0;

 m_screen.SetWindowPos(&CWnd::wndBottom,0,0,720,576, SWP_NOMOVE | SWP_SHOWWINDOW);

 UpdateWindow();

 main_window_handle = m_screen.GetSafeHwnd();

if(DD_OK!=(DirectDrawCreateEx(NULL, (void **)&lpdd7, IID_IDirectDraw7, NULL)))

 {

  return ;

 }

 // set the cooperative level for full-screen mode

 if(DD_OK != lpdd7->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(), DDSCL_NORMAL))

 {

  return ;

 }

 /*设置控制级时,如果应用程序请求了 DDSCL_NORMAL 模式(表明应用程序以普通窗口的形式运行),则不需要提供一个指定窗口的句柄.给窗口句柄参数为 NULL, 所有的窗口都可以被设置为普通的控制级. */

 // set the display mode to 640x480x256

 // 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

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 ;

 }

//

 memset(&ddsd,0,sizeof(ddsd));

 ddsd.dwSize = sizeof(ddsd);

 //DDPIXELFORMAT camdispPixelFormat = {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','U','1','2'), 0,0,0,0,0}; 


 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;

 ddsd.dwWidth = 720;

 ddsd.dwHeight = 576;

 //ddsd.dwBackBufferCount = 0;//忽略            //忽略

 ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN| DDSCAPS_VIDEOMEMORY;

//ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);

 ddsd.ddpfPixelFormat.dwFlags  = DDPF_RGB ;

 ddsd.ddpfPixelFormat.dwFourCC = 0;

 ddsd.ddpfPixelFormat.dwRGBBitCount = 16;

 ddsd.ddpfPixelFormat.dwRBitMask = 0x7c00;

 ddsd.ddpfPixelFormat.dwGBitMask = 0x3E0;

 ddsd.ddpfPixelFormat.dwBBitMask = 0x1F;

    ddsd.ddpfPixelFormat.dwRGBAlphaBitMask = 0;

 //

if(DD_OK!=(lpdd7->CreateSurface(&ddsd, &lpddsmypage[0], NULL)))

 {

  return ;

 }

POINT p;

p.x = 0; p.y = 0;

 m_screen.ClientToScreen(&p);//获取屏幕顶点

 // m_screen.GetClientRect(&rcRectDest);

rcRectDest.left = 0;  rcRectDest.top=0;  rcRectDest.right = 720;  rcRectDest.bottom = 576;

OffsetRect(&rcRectDest, p.x, p.y);//把窗口区域转化为屏幕区域坐标

SetRect(&rcRectSrc, 0, 0, 720, 576);//初始化窗口区域

 /////////////////////////////////////////////////////////////

 FILE *fp;

 buf[0] = new BYTE[720*576*3];

// buf[1] = new BYTE[720*576];

// buf[2] = new BYTE[720*576/4];

fp = fopen("d:\\temp\\720576.bmp","rb+");

    fread(buf[0],54,1,fp);

 fread(buf[0],720*576*3,1,fp);

 //while(!feof(fp))

 {

  if(DD_OK != lpddsmypage[0]->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL))

  {

   return ;

  }

UCHAR  *lp_buffer = (UCHAR *)ddsd.lpSurface;

  WORD tmp=0;

  WORD *bmp555=new WORD[720];

  ///////////////////////////提取数据/////////////////////////////////////////////

  for (int i=0;i<576;i++)

  {

   for (int k=0;k<720;k++)

   {

    tmp = ((buf[0][(i*720+k)*3+2]&0xf8)>>3)<<10 | ((buf[0][(i*720+k)*3+1]&0xf8)>>3)<<5 | (buf[0][(i*720+k)*3+0]&0xf8)>>3;

    bmp555[k] = tmp&0xffff;

   }

             memcpy(lp_buffer +(575-i)*ddsd.lPitch,bmp555,720*2);

  }

Sleep(40);

  //////////////////////////////////////////////////////////////////////////

  //memcpy(bmp_buffer,buf[0],720*576*2);

if(DD_OK != lpddsmypage[0]->Unlock(NULL))

  {

   return ;

  }

  HRESULT     ddRval;

  ddRval= lpddsprimary->Blt( &rcRectDest, lpddsmypage[0], &rcRectSrc, DDBLT_WAIT, NULL);

  //while(ddRval == DDERR_WASSTILLDRAWING);

  //ddRval=lpddsprimary->Flip(lpddsmypage[0],1);

  if(DD_OK != ddRval)

  {

   return ;

  }

 }

 //fclose(fp);

 if(lpddsmypage)

 {

  lpddsmypage[0]->Release();

  lpddsmypage[0]=NULL;

 }

 MessageBox(_T("over"));

directdraw显示rgb555的更多相关文章

  1. directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失

    原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ...

  2. directdraw显示rgb565

    // TODO: 在此添加控件通知处理程序代码  height=width=widthBytes=0;  m_screen.SetWindowPos(&CWnd::wndBottom,0,0, ...

  3. directdraw显示yuv420(YV12)

    height=width=widthBytes=0;  m_screen.SetWindowPos(&CWnd::wndBottom,0,0,720,576, SWP_NOMOVE | SWP ...

  4. directdraw显示yuv422(yuy2)

    #include <mmsystem.h> void CshowpicDlg::OnBnClickedButton3() {  // TODO: 在此添加控件通知处理程序代码 height ...

  5. directdraw 显示yuv

    http://www.cnblogs.com/lidan/archive/2012/03/23/2413772.html http://www.yirendai.com/msd/

  6. 《Windows游戏编程大师技巧》学习笔记——关于创建显示表面

    1.如你所知,显示在屏幕上的图像仅仅只是是以某种格式存储在内存中的有色像素组成的矩阵.或是调色板化的或是RGB模式的.在不论什么一种情况下.要想做点什么你都必须知道如何绘制图到内存中,然而Direct ...

  7. 使用DirectDraw直接显示YUV视频数据

    最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中显示YUV数据的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收数据,将数据传给解码器,并 ...

  8. DirectDraw 直接显示RGB图象的最简单实现

      来自:   #include "DDraw.h" class CDDraw { public: void CleanUp(); void DrawDIB(BITMAPINFOH ...

  9. 如何使用DirectDraw直接显示RGB、YUV视频数据(播放yuv)

    #include "draw.h"void CTest100Dlg::OnButton1() { // TODO: Add your control notification ha ...

随机推荐

  1. MUI 页面传值,因为用的是H5+ plus方法所以要在真机上才能测试出效果

    页面a.html <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  2. Chocolatey 和 Redis windows安装记录

    前言 最近研究redis,发现Redis没有官方的windows版本,但MsOpenTech有一直维护对应的Redis版本,其下载地址如下: https://github.com/MSOpenTech ...

  3. 移动端的弹窗滚动禁止body滚动

    前言 最近一个需求是弹窗展示列表,显然是需要一个滚动条的,而滚动到底部就会穿透到body滚动,而阻止默认行为是不行的,这样两个都滑动不了 所以我在点击出现弹窗的时候在body加了以下css让它没有滚动 ...

  4. BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]

    3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...

  5. 剑指offer试题(PHP篇一)

    1.二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  6. Maven项目中的配置文件找不到以及打包问题

    我们在使用maven开发项目的时候,创建model的时候会自动创建一个resource目录:这个目录是用来放配置文件的,我们把配置文件放在这个目录中项目打包才会将配置文件打包进去. 有的时候我们会把配 ...

  7. [Python Study Notes] 变量/编码/注释

    Ps:我这里选择的IDE为pycharm,个人感觉还是比较好用的. 1.变量 声明变量/赋值变量 #_*_ coding:utf-8 _*_ # author = "liu" ab ...

  8. 整理的linux面试运维题

    如何在非交互模式下把 /home/example/下所有.conf文件中的 192.168.0.2 改成 db01 ?   find /home/example/ -type f -name &quo ...

  9. Vuex源码解析

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...

  10. ng组件通讯的几种方式

    通过输入型绑定把数据从父组件传到子组件. 如<app-hero-child *ngFor="let hero of heroes"  [hero]="hero&qu ...