BOOL CTestView :: PaintDIB(HDC hDC,RECT des,RECT src, MYBITMAP myb){
BITMAPINFOHEADER* lpDIBHdr; // BITMAPINFOHEADER指针
BOOL bSuccess=FALSE; // 成功标志
HPALETTE hPal=NULL; // DIB调色板
HPALETTE hOldPal=NULL; // 以前的调色板
lpDIBHdr = myb.lpbmp;
// 找到DIB图像象素起始位置
int lw=WIDTHBYTES(myb.lpbmp->biWidth*8);
// 获取DIB调色板,并选中它
if (m_palDIB != NULL)
{
hPal = (HPALETTE) m_palDIB->m_hObject;
// 选中调色板
hOldPal = ::SelectPalette(hDC, hPal, TRUE);
}
// 设置显示模式
::SetStretchBltMode(hDC, COLORONCOLOR);
int bw =myb.lpbmp->biWidth;
int bh = myb.lpbmp->biHeight;
// 判断是调用StretchDIBits()还是SetDIBitsToDevice()来绘制DIB对象
if(des.right-des.left>=(src.right-src.left)&&
(des.bottom-des.top)>=(src.bottom-src.top)
)
{
// 原始大小,不用拉伸。
bSuccess = ::SetDIBitsToDevice(hDC, // hDC
0 , // DestX
0 , // DestY
bw , // nDestWidth
bh, // nDestHeight
0, // SrcX
0, // SrcY
0, // nStartScan
bh, // nNumScans
myb.data, // lpBits
(LPBITMAPINFO)lpDIBHdr, // lpBitsInfo
DIB_RGB_COLORS
); // wUsage
}
else
{
// 非原始大小,拉伸。
bSuccess = StretchDIBits(hDC, // hDC
des.left , // DestX
des.top , // DestY
des.right , // nDestWidth
des.bottom, // nDestHeight
src.left, // SrcX
src.top, // SrcY
src.right, // nStartScan
src.bottom, // nNumScans
myb.data, // lpBits
(LPBITMAPINFO)lpDIBHdr, // lpBitsInfo
DIB_RGB_COLORS,
SRCCOPY
); // wUsage
}
// 解除锁定
// 恢复以前的调色板
if (hOldPal != NULL)
{
::SelectPalette(hDC, hOldPal, TRUE);
}
// 返回
return bSuccess;
注意它们的第8个参数一个是uStartScan,为0,一个是nSrcWidth,不为0
分享到:
相关推荐
### 如何在VC++中显示位图:深入解析与实现 #### 1. 位图文件结构概述 位图文件(通常以`.bmp`作为扩展名)是一种存储图像信息的标准格式,尤其适用于需要精确控制像素级别的场景。位图文件主要分为四个部分: - ...
标题"vc 压缩显示位图"指的是在VC++环境中,利用C++编程实现一个静态控件,不仅能够显示位图,还能在显示时对位图进行压缩处理,同时支持生成PNG图片的功能。这种技术在开发图形用户界面(GUI)时非常有用,可以优化...
在Windows环境下,尤其是在Visual C++ (VC++) 开发中,处理和显示位图(BMP)文件是一项常见的任务。BMP是一种无损的图形文件格式,广泛用于存储图像数据。本篇文章将深入探讨如何在VC++ 6.0 MFC(Microsoft ...
在VC++编程环境中,"显示位图,设备无关图"是一个常见的任务,涉及到Windows图形设备接口(GDI)和设备无关位图(DIB)。在这个主题中,我们将深入探讨如何在VC++中创建一个小程序来显示位图,尤其是设备无关图。 ...
而VC打印位图则涉及到Windows图形设备接口(GDI)或者GDI+技术,用于将图像数据发送到打印机。 首先,要实现VC+MapX打印地图,通常需要以下步骤: 1. **使用MapX库**:在项目中引入MapX库,并创建一个MapX对象,...
本文将详细介绍如何使用Visual C++(VC)来读取和显示位图图像,主要基于标题和描述中提到的"使用读取VC位图图像"这一主题。 首先,位图(Bitmap)是一种常见的图像文件格式,用于存储像素数据。在Windows API中,...
本主题将深入探讨如何在VC++的列表框中显示位图,并实现动态更新位图大小以及根据数据量自动添加滚动条的功能。 首先,我们需要了解MFC(Microsoft Foundation Classes),它是微软为VC++提供的一个面向对象的类库...
- **显示位图**:利用Windows API中的绘图函数将位图显示在窗口上。 - **缩放位图**:通过调整位图的尺寸来改变其大小,同时保持图像质量。 - **其他操作**:包括但不限于旋转、颜色变换等高级功能。 #### 结论 ...
在这个场景中,我们讨论的是如何在多视图(Multiple Document Interface, MDI)应用程序中实现分割视图并显示位图。MDI应用允许用户在一个窗口内打开多个子窗口,每个子窗口称为一个视图,可以独立显示和操作不同的...
总结来说,实现"VC实现位图透明显示"需要对GDI和位图处理有深入的理解,包括位图的创建、加载、颜色空间以及透明度的概念。通过合理运用这些知识,开发者可以在VC++环境下创建出具有高级视觉效果的图形用户界面。
5. 创建显示函数,将读取到的位图数据加载到设备上下文(DC)中,并使用CreateDIBSection创建位图对象。之后,可以使用CDC的DrawBitmap函数或者StretchDIBits函数将位图绘制到视图上。 6. 最后,记得在程序的适当...
在VC++编程环境中,位图(Bitmap)是一种常见的图像数据结构,用于存储和显示图形信息。位图可以是任意尺寸和颜色深度的,通常用于GUI(图形用户界面)中的图标、图片或者自定义画布。本示例将详细介绍如何在VC++中...
本文将详细讲解位图的基本概念、如何读取和显示位图,以及进行简单的图像处理,包括离散余弦变换(DCT)和中值滤波。 位图,也称为栅格图像,是一种像素阵列表示的图像格式,每个像素对应一个颜色值。常见的位图...
GDI提供了一系列的函数,如CreateDIBSection、SetDIBits、GetDIBits等,用于创建、读取和显示位图。而GDI+则提供了更为现代且面向对象的API,如Bitmap类,能够更方便地处理图像数据。在进行抖动显示时,首先需要加载...
- **位图数据的复制**:使用`SetDIBits`函数将原始位图数据复制到新创建的位图中,这样可以在不影响原始位图的情况下进行操作。 #### 4. 扩展与优化建议 - **错误处理**:虽然代码中已经加入了一些基础的错误处理...
在VC++环境中,显示位图并进行读写操作是一项常见的图像处理任务,这对于开发者来说是图形用户界面(GUI)设计中的重要技能。本项目“VC-showBITMAP.rar”旨在教授如何使用Visual C++来实现这一功能,特别是针对256...
本文将详细讲解如何使用CBitmap类在VC6.0下显示位图,并结合提供的文件名称"Bmp"来讨论位图文件的基本知识。 CBitmap类是MFC(Microsoft Foundation Classes)库中的一个关键组件,它提供了处理Windows GDI...
若要实现按特定条件搜索并显示位图,可能需要添加额外的数据结构来存储位图的元信息,比如关键字或标签。搜索功能将遍历这些信息并显示匹配的位图。 在项目中,`MpictureLx`可能是包含相关代码或资源的文件,例如...
在本文中,我们将深入探讨如何使用VC++ 6.0打开和显示位图(BMP)文件。位图文件是一种常见的图像格式,广泛应用于各种图形处理任务。在VC++ 6.0环境下,通过理解BMP文件结构和利用C++编程技巧,我们可以实现对BMP...
1. **文件头(BITMAPFILEHEADER)**:包含文件类型标识("BM"或0x424d),文件大小,以及位图数据相对于文件头的偏移量等信息。 2. **位图信息头(BITMAPINFOHEADER)**:提供关于图像的详细信息,如图像宽度、高度...