来自:

 
#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. html——a标签添加点击事件,火狐浏览器直接显示0

    一.问题描述 给一个a标签添加了点击事件,页面直接给了0如下图 二.问题解决 后台调试模式下,发现也进了后台方法,也返回了页面. 于是想到先把页面里大部分内容去掉,去掉所有js,查看是否是部分代码有问 ...

  2. iOS开发之数据存取3-CoreData自定义数据类型

    当系统提供的类型不能达到我们的使用要求时,比如我想在CoreData中存储UIColor,该怎么办呢? 这时候就要用到CoreData中非常强大的一个存储类型了:Transformable 下面将通过 ...

  3. Android Dock底座应用开发

    很多网友可能发现部分Android手机或平板支持底座,目前比较主流的有摩托罗拉系列,中低端的Milestone和Milestone 2代均可以使用充电底座或多媒体底座,网购大概50元左右.而中高端的A ...

  4. 建立docker私有hub

    docker是一个非常好用的虚拟化工具. 下面给出建立私有docker hub的方法.docker将私有hub的环境打包在registry image中 执行指令: docker run -p 500 ...

  5. Python Requests模块讲解4

    高级用法 会话对象 请求与响应对象 Prepared Requests SSL证书验证 响应体内容工作流 保持活动状态(持久连接) 流式上传 块编码请求 POST Multiple Multipart ...

  6. http://www.yihaomen.com/article/java/302.htm

    http://www.yihaomen.com/article/java/302.htm

  7. lintcode: 有效的括号序列

    题目: 有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and']', 判定是否是有效的括号序列. 样例 括号必须依照 "() ...

  8. SpringMVC学习总结(三)——Controller接口详解(1)

    4.12.ParameterizableViewController 参数化视图控制器,不进行功能处理(即静态视图),根据参数的逻辑视图名直接选择需要展示的视图. <bean name=&quo ...

  9. iOS使用Charts框架绘制—柱形图

    首先看一下最终要实现的效果: 最终效果 一.初始化barChartView 绘制柱形图需要用到BarChartView这个类,下面是初始化代码: self.barChartView = [[BarCh ...

  10. Android学习之-TextView的滑动效果

    textView中如何设置滚动条 在xml中定义: <TextView            android:layout_width="wrap_content"      ...