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





 

来自:





#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图象的最简单实现,码迷,mamicode.com

时间: 2024-08-13 18:45:00

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

[原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图

关于如何移植SDL2.0到安卓上面来参考我的上一篇文章:[原]零基础学习SDL开发之移植SDL2.0到Android 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示. 博主的开发环境:Ubuntu 14.04 64位,Eclipse + CDT + ADT+NDK 博主曾经自己使用NDK编译出了libSDL2.so,然后使用共享库的方式来调用libSDL2中的函数,结果发现SDL\src\core\android\SDL_android.c 这个jni函数写的实在是不够自己另外做

iOS_Xcode6如何显示启动图

iOS_Xcode6如何显示启动图? 直接拖图片到Images.xcassets里面是不可以的. 第一步:要新建一个文件夹名字叫 LaunchImage,然后,拖入图片到 LaunchImag 第二步:在Info.Plist里面,删除 Launch screen interface file base name 这个属性 第三步:在XcodeProject App Icons and Lauch Images 然后编译,成功!

DAY13 彩色图片分别显示RGB三个通道图片 求图像的均值 方差 熵

% 读取一张彩色图片 分别显示RGB三个通道图片% 将彩色图片换成灰度图像 求图像的均值 方差 熵im=(imread('robot.jpg'));figure,imshow(im); % Step1 分别显示RGB三个通道图片subplot(2,2 ,1),imshow(im); %原始彩色图像subplot(2, 2 ,2),imshow(im(:,:,1)); %R通道 im(:,:,1) 表示三维图像 第一个参数表示获取全部行subplot(2 ,2 ,3),imshow(im(:,:,

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

ListView.GridView显示组图,处理机制相同 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="w

asp.net web开发中使用JS百度地图信息弹出窗中显示echarts图

之前在WebGIS开发中,主要是企业级开发,而面向大众级的开发平台,如百度地图等却很少. 最近手头上的一个项目,有一个"电子地图"功能,由于功能需求仅仅是信息查看和浏览,所以选用了百度地图,但是在开发中遇到一个问题,就是信息提示窗口中,要显示折线图,搜索了一大圈也没有这样的示例. 后来思考了一下,由于信息窗口中使用的是html代码,所以可以间接使用iframe来加载一个包含图表数据的页面,最终实现了功能,以下是初步的示例效果,后续还需要UI设计人员进行优化处理. geoc.getLoc

扫描识别图中文字的简单方法

遇到图中文字需要识别提取出来的时候,大家都是如何去操作的呢?相信有一些小伙伴们首先想到的便是通过手动打字的方式进行转换,但是如果图中文字过多再采取这种做法的话简直太麻烦了,而且耽误时间,那有什么简单的方法呢?下面小编就来为大家讲解一种扫描识别图中文字的简单方法,有需要的小伙伴们可以参考一下. 操作步骤: 1:在电脑中将使用到的迅捷OCR文字识别软件打开,进入主界面后点击极速识别板块. 2:进入极速识别界面后,点击添加文件按钮,将所需转换的图片添加进来. 3:图片添加进来后,将文件识别格式设置为T

WPF编程 ,TextBlock 显示百分数值的一种简单方法。

原文:WPF编程 ,TextBlock 显示百分数值的一种简单方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/86524376 此处是绑定了另一控件的值,也可用于数据绑定的情况,最后格式化一句是关键,? <TextBlock Text="{Binding Value,Mode=OneWay,ElementName=pro2,StringFormat={}{0:p2}}" /&

Android下载并显示GIF图

最近项目需要实现在线加载GIF图的功能,于是我在网上翻了一番,发现有个开源项目(android-gif-drawable)可以很好的支持GIF动态图的显示.而且它的底层解码使用C实现,极大的提高了解码效率,同时很大程度上避免了OOM现象出现. 这篇文章主要是展示如何使用该项目的Demo,以备不时之需. 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

css固定背景图位置 实现屏幕滚动时 显示背景图不同区域

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .container { width: 100%; padding: 50px 0; padding-bottom: 30px; height: auto; } .container.image-containe