来自:

 
#include "DDraw.h"

class CDDraw 

public: 
void CleanUp(); 
void DrawDIB(BITMAPINFOHEADER* pBI,char* pData,RECT*rt); 
BOOL Init(HWND hWnd,int nWidth,int nHeight); 
CDDraw(); 
virtual ~CDDraw();

private: 
HWND m_hDrawWnd; 
LPDIRECTDRAW lpDD; // DirectDraw 对象 
LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw 主页面 
LPDIRECTDRAWSURFACE lpBackdds; 
LPDIRECTDRAWCLIPPER lpClipperBack; 
};

CDDraw::CDDraw() 

lpDD=NULL; 
lpDDSPrimary=NULL; 
lpBackdds=NULL; 
lpClipperBack=NULL; 
}

CDDraw::~CDDraw() 

if(lpDD!=NULL)CleanUp(); 
}

BOOL CDDraw::Init(HWND hWnd,int nWidth,int nHeight) 

if(hWnd==NULL) return FALSE;

m_hDrawWnd=hWnd;

if(DirectDrawCreate(NULL,&lpDD,NULL)!=DD_OK)return FALSE;

lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL);

DDSURFACEDESC ddsd; 
ddsd.dwSize = sizeof( ddsd ); //结构的大小 
ddsd.dwFlags = DDSD_CAPS; //指定DDSURFACEDESC结构的ddsCaps成员为可用 
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; //指定要创建的是主页面

//创建主页面对象 
if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK) return FALSE;

if(lpDD->CreateClipper(NULL,&lpClipperBack,NULL)!=DD_OK) return FALSE;

lpClipperBack->SetHWnd(0,hWnd);

lpDDSPrimary->SetClipper(lpClipperBack);

lpClipperBack->Release(); 
lpClipperBack=NULL;

ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; 
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; 
ddsd.dwHeight = nHeight; 
ddsd.dwWidth = nWidth; 
if(lpDD->CreateSurface(&ddsd, &lpBackdds, NULL)!=DD_OK) return FALSE;

return TRUE; 
}

void CDDraw::DrawDIB(BITMAPINFOHEADER *pBI, char *pData, RECT *rt) 

RECT srt; 
srt.left=0; 
srt.top=0; 
srt.right=pBI->biWidth; 
srt.bottom=pBI->biHeight;

HDC hDC; 
lpBackdds->GetDC(&hDC);

SetDIBitsToDevice( 
hDC, 
0, 
0, 
pBI->biWidth, // source rectangle width 
pBI->biHeight, // source rectangle height 
0, // x-coord of source lower-left corner 
0, // y-coord of source lower-left corner 
0, // first scan line in array 
pBI->biHeight, // number of scan lines 
pData, // array of DIB bits 
(const struct tagBITMAPINFO*)pBI, // bitmap information 
DIB_RGB_COLORS // RGB or palette indexes 
);

lpBackdds->ReleaseDC(hDC);

lpDDSPrimary->Blt(rt,lpBackdds,&srt,0,NULL); 
}

void CDDraw::CleanUp() 
{
if(lpDD!=NULL) 

if(lpClipperBack!=NULL) 

lpClipperBack->Release(); 
lpClipperBack=NULL; 
}

if(lpDDSPrimary!=NULL) 

lpDDSPrimary->Release(); 
lpDDSPrimary=NULL; 
}

if(lpBackdds!=NULL) 

lpBackdds->Release(); 
lpBackdds=NULL; 
}

lpDD->Release(); 
lpDD=NULL; 

} (ixmy)

 
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200903/7227.html]
 

DirectDraw 直接显示RGB图象的最简单实现的更多相关文章

  1. halcon+WinForm显示rgb图并灰度化

    1.halcon代码,并导出成C# read_image (Demo, 'C:/Users/user/Pictures/demo.jpg') dev_display (Demo) rgb1_to_gr ...

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

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

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

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

  4. 图像处理基础---RGB图 灰度图 索引图 调色板

    (1)二进制图 在二进制图中,像素的取值为两个离散数值0或1中的一个,0代表黑色,1代表白色 例 A=[0 0 1;1 1 0; 0 0 1];>> imshow(A,'InitialMa ...

  5. android 项目学习随笔十七(ListView、GridView显示组图)

    ListView.GridView显示组图,处理机制相同 <?xml version="1.0" encoding="utf-8"?> <Li ...

  6. excel在一个图表内,显示折线图和柱状图

      折线图和柱状图,在同一个图表中拆分显示   一个图,设置主坐标轴 另外一个图,设置次坐标轴     拆分,通过调整纵坐标的最小值和最大值来实现     关于图表的标题,选中图表,选择布局,然后图表 ...

  7. 左右推拽显示对比图 - jQyery封装 - 附源文件

    闲来无事,做了一个模块效果 左右拖拽显示对比图,是用jq封装的 利用鼠标距离左侧(0,0)坐标的横坐标位移来控制绝对定位的left值 再配合背景图fixed属性,来制作视觉差效果 代码如下 <! ...

  8. Android 使用pl.droidsonroids.gif.GifImageView在安卓中显示动图遇到的问题

    在做一款聊天软件,其中聊天界面需要发送表情,而表情都是动图,在安卓中想要显示动图,就要借助第三方框架,我选的是pl.droidsonroids.gif.GifImageView. 使用方法如下:你在g ...

  9. Photoshop显示RGB值问题

    Bmp与JPEG格式的不同之处在哪里? 使用OpenCV读写图像,然后由Photoshop显示时候结果并不相同,使用jpg格式的图像灰度值明显大于bmp格式,但jpg格式的显示信息是错误的. 过程: ...

随机推荐

  1. Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...

  2. POJ2752 Seek the Name,Seek the Fame KMP算法

    KMP继续练手.题目问的是一个串前缀等于后缀的可能长度是哪些,输出来.题目考的是对KMP失配指针的理解,当最后一位失配(即'\0'那里)时,指针会移动到前缀对应匹配的部分,所以这个长度是我们要的,然后 ...

  3. CF 295A Greg and Array (两次建树,区间更新,单点查询)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  4. POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)

    题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可.即若1200,反向数为21.题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0. #include &l ...

  5. java使用正则表达式——实例

    Java代码   import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author        Der *  ...

  6. MySQL.. ERROR! The server quit without updating PID file问题解决

    不小心将服务器OS给重启了,再启动数据库的时候,出现了很奇怪的问题 [root@dev run]# service mysql restart ERROR! MySQL server PID file ...

  7. Linux解压 tar命令

    tar [-cxtzjvfpPN] 文件与目录 ....参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件! ...

  8. 【转】Dr.com 5.20破解教程

    Dr.com 5.20破解教程 方法一  1.首先下载相关工具 Process Explorer(大家可以自行百度 一般绿色汉化版就可以)右键选择以管理员权限运行process的主程序 然后运行drc ...

  9. HTML5入门7---"session的会话缓存"和"localStorage的cookie"缓存数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. JTable指定单元格加控件

    原文链接:http://blog.csdn.net/transit136/article/details/2133638 JTable可以给表格的某一列加入控件,下面方法可以实现   try{   T ...