StretchDIBits 的使用

StretchDIBits

 

该函数将DIB中矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中。如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。
参数:
hdc:指向目标设备环境的 句柄
XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。
YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
nDestWidth:指定目标矩形的宽度。
nDestHeight:指定目标矩形的高度。
XSrc:指定 DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。
YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。
nSrcWidth:按像素点指定DIB中源矩形的宽度。
nSrcHeight:按像素点指定DIB中源矩形的高度。
lpBits:指向DIB位的 指针,这些位的值按字节类型 数组存储,有关更多的信息,参考下面的备注一节。
lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。
iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的 RGB值或索引。参数iUsage必须取下列值,这些值的含义如下:
DIB_PAL_COLORS:表示该数组包含对源设备环境的逻辑 调色板进行索引的16位索引值。
DIB_RGB_COLORS:表示该颜色表包含原义的RGB值,若想了解更多的信息,请参考下面备注一节。
dwRop:指定源像素点、目标设备环境的当前刷子和目标像素点是如何组合形成新的图像。若想了解更多信息,请参考下面的备注一节。
返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失败,那么返回值是GDI_ERROR。
Windows NT:若想获取更多错误信息,请调用GetLastError函数。
Windows 98、Windows NT 5.0及以后版本:如果 设备驱动程序不支持传送给StretchDIBits的JPEG文件格式的图像,则该函数将失败,并返回GEI_ERROR。
备注:自底向上的DIB的起始点为左下角,自顶向下DIB的起始点为左上角。
如果nSrcWidth和nDestWidth参数的符号不同。或是nSrcHeight和nDesHeight参数的符号不同。那么函数StretchDIBits将创建位图的 镜像。如果NsrcWidth和NdestWidth符号不同,那么函数将沿着X轴创建位图镜像。如果NsrcHeight和NdestHeight符号不同,那么函数将沿着Y轴创建位图镜像。
对于Windows 98、Windows NT 5.0及以后版本:该函数允许将 JPEG图像用作 源图像,每个参数如何使用其实仍是一样的。
如果BITMAPINFOHEADER结构中的成员biCompression为BI_JPEG,那么参数lpBits指向的是一个包含JPEG图像的 缓冲区。BITMAPINFOHEADER结构中的biSizeImage成员指定了该缓冲区的大小。参数iUsage必须设为DIB_RGB_COLORS。dwRop必须设为SRCCOPY。
为确保打印时可以有正确的 图元文件假脱机操作。应用程序应在调用StretchDIBits函数之前调用CHECKJPEGFORMAT转义符,以确认打印机识别JPEG图像。
ICM:执行颜色管理。如果指定的BITMAPINFO结构中的bmiHeader不包含BITMAPV4HEADER或BITMAPV5HEADER,那么当前设备环境的颜色配置(profile)被用作源颜色配置(profile)。如果没有颜色档案,那么就使用RGB。如果指定的BITMAPINFO结构中的成员bmiHeader包含了BITMAPV4HEADER或BITMAPV5HEADER,那么将把位图标头中指定的颜色配置(profile)用作源颜色配置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC 中,StretchDIBits 函数用于将设备无关位图(DIB)绘制到设备上,并按比例缩放。以下是使用 StretchDIBits 函数的基本步骤: 1. 创建一个 BITMAPINFO 结构,它描述了 DIB 的格式和颜色信息。 2. 创建一个指向 DIB 的指针,该 DIB 包含要绘制的图像数据。 3. 使用 CreateCompatibleDC 函数创建一个兼容设备上下文(DC)。 4. 使用 CreateCompatibleBitmap 函数创建一个与 DC 兼容的位图。 5. 使用 SelectObject 函数选择该位图作为 DC 的绘图对象。 6. 使用 StretchDIBits 函数将 DIB 绘制到位图上,并按比例缩放。 7. 使用 BitBlt 函数将位图绘制到设备上。 下面是一个简单的使用 StretchDIBits 函数的示例代码: ```c++ void CMyView::OnDraw(CDC* pDC) { // 创建一个 BITMAPINFO 结构 BITMAPINFO bmi = { 0 }; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = m_nWidth; bmi.bmiHeader.biHeight = m_nHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biCompression = BI_RGB; // 创建一个指向 DIB 的指针 BYTE* pBits = GetDibBits(); // 创建一个兼容 DC CDC dcMem; dcMem.CreateCompatibleDC(pDC); // 创建一个兼容位图 CBitmap bmp; bmp.CreateCompatibleBitmap(pDC, m_nWidth, m_nHeight); CBitmap* pOldBmp = dcMem.SelectObject(&bmp); // 绘制 DIB 到位图上 StretchDIBits(dcMem.GetSafeHdc(), 0, 0, m_nWidth, m_nHeight, 0, 0, m_nWidth, m_nHeight, pBits, &bmi, DIB_RGB_COLORS, SRCCOPY); // 绘制位图到设备上 pDC->BitBlt(0, 0, m_nWidth, m_nHeight, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBmp); } ``` 在上面的示例代码中,GetDibBits 函数返回一个指向 DIB 数据的指针。m_nWidth 和 m_nHeight 是 DIB 的宽度和高度。首先,我们创建了一个 BITMAPINFO 结构来描述 DIB 的格式和颜色信息。然后,我们创建了一个兼容 DC 和兼容位图,并将该位图作为 DC 的绘图对象。最后,我们使用 StretchDIBits 函数将 DIB 绘制到位图上,并使用 BitBlt 函数将位图绘制到设备上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值