读书人

()BitBlt函数中HDC的声明和IsEmpty(

发布时间: 2012-02-24 16:30:38 作者: rapoo

(求助)BitBlt函数中HDC的声明和IsEmpty()的调用

C/C++ code
void __fastcall TForm1::Button5Click(TObject *Sender) // 从上下到中间{PaintBox1 -> Refresh();hdc1 = Image1 -> Canvas -> Handle; //获得源设备环境句柄hdc2 = PaintBox1 -> Canvas -> Handle; // 获得目标设备环境句柄for(int i = 0; i <= Image1 -> Height/2 + 1; i++) {    BitBlt(hdc2, 0, i, Image1 -> Width, i, hdc1, 0, i, SRCCOPY);    //将源图像上半部分从上往下用SRCCOPY函数复制到目标图像的上半部分    BitBlt(hdc2, 0, Image1 -> Height-i, Image1 -> Width, Image1 -> Height,    hdc1, 0, Image1 -> Height-i, SRCCOPY);    //将源图像的下半部分从下往上用 SRCCOPY函数复制到目标图像的下半部分    Sleep(10); //relay 10 milisecs }}

上面是代码一,用于图像处理,即将源图像以从上、下两边同时到中间的效果复制到目标图像中显示,是一种图像特效形式,但是BitBlt函数中的HDC,也就是句柄如何定义啊?在源图像和目标图像中都有一个句柄,分别是hdc1,hdc2,我用上面的代码会报错:Undefined symbol "hdc1 and hdc2"。请教如何声明这两个句柄变量?


C/C++ code
void __fastcall TForm1::N3Click(TObject *Sender)   //save the image{if(!CurrentFile.IsEmpty())Image1 -> Picture -> SaveToFile(CurrentFile);  //save if already nameedelse A1Click(Sender);      //otherwise get a name}

对于代码二,是报错:说在.IsEmpty左边需要一个结构体(structure)?请给指点下。谢谢了

[解决办法]
问题一这样
C/C++ code
HDC hdc1 = Image1 -> Canvas -> Handle; //获得源设备环境句柄HDC hdc2 = PaintBox1 -> Canvas -> Handle; // 获得目标设备环境句柄
[解决办法]
以后遇到这样的情况,从网上复制来的代码片段不完整时,教你一个猜对象类型的方法:
hdc = Image1 -> Canvas -> Handle;
这一行来说,反查即可,Image1明显是一个TImage对象,TImage的Canvas属性是一个TCanvas对象,而TCanvas的Handler属性,是一个HDC类型的,所以,hdc就是一个HDC类型的对象。

读书人网 >C++ Builder

热点推荐