吵吵   2011-09-10  阅读:2,669

该篇日志将会告诉你如何实现vc界面编程的一些绚丽的技巧,包括图片的梯度颜色的变化,按照不同透明度的图像合成,让vc界面的编程实现犹如ps般得绚丽。本文使用的是MsImage32.dll。

  MsImage32.dll不是vs平台中包含的的库,如果你第一次应用它而没有在设置里面加入msimg32.lib库的话,将会编译出错的,错误很简单:MsImg32Usage.obj : error LNK2019: unresolved external
在vs2008中使用库链接

  • 选择需要使用该库的项目或者工程
  • 选择菜单:Project | Properties
  • 选择Configuration Properties | Linker | Input
  • 输入msimg32.lib
  • #pragma comment( lib, “Msimg32” )

::GdiTransparentBlt

这是其中最简单的一个函数了,作用是选择性的绘制功能,如某些图片是有蓝色底色的,那么使用该函数就可以不绘制出蓝色的部分来,从而实现图片的不规则绘制,如果你对函数::BitBlt比较熟悉的话,那么肯定没有问题使用该函数了。


BOOL GdiTransparentBlt(
__in HDC hdcDest, // Handle to the destination DC
__in int xoriginDest, // X coordinate of the upper-left corner in destination rectangle
__in int yoriginDest, // Y coordinate of the upper-left corner in destination rectangle
__in int wDest, // The width of the destination rectangle
__in int hDest, // The height of the destination rectangle
__in HDC hdcSrc, // Handle to the source DC
__in int xoriginSrc, // X coordinate of the upper-left corner in source rectangle
__in int yoriginSrc, // Y coordinate of the upper-left corner in source rectangle
__in int wSrc, // The width of the source rectangle
__in int hSrc, // The height of the source rectangle
__in UINT crTransparent // The RGB color in the source bitmap to treat as transparent//想要使其透明的颜色
);
 
这里有个例子实现一个小人的透明绘制:


HDC hImageDC = ::CreateCompatibleDC(hdc);

// Common method to load bitmap images from a file or a resource.
article::AutoBitmap bmpBob((HBITMAP)::LoadImage(NULL,
_T("codeproject_bob.bmp"),
IMAGE_BITMAP,
0, 0,
LR_LOADFROMFILE | LR_DEFAULTCOLOR));
::SelectObject(hImageDC, bobBmp);

// Method to request the properties of the GDI Object.
BITMAP bm;
::GetObject(bmpBob, sizeof(bm), &bm);

// This example scales the image down by 50%.
// Set the Stretch Blt Mode that will average the value of the combined pixels.
::SetStretchBltMode(hImageDC, HALFTONE);

// Blt and scale the image to the destination DC,
// while processing a transparency layer.
::GdiTransparentBlt(hdc,
0, 0, bm.bmWidth / 2, bm.bmHeight / 2,
hImageDC,
0, 0, bm.bmWidth, bm.bmHeight,
RGB(0, 0, 255)); // 选择要除去的颜色,我们选择蓝色.

::DeleteDC(hImageDC);

哈,先讲到这里,吃个饭去,稍后继续。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

一条回应:“vc中使用MsImg32.dll图像合成指南”

  1. 美女博客说道:

    不是很懂,但也要支持一下!

发表评论

电子邮件地址不会被公开。 必填项已用*标注