C++builder在paintbox中绘图问题
1,设置Canvas都为paintbox1->Canvas,但是代码YuanXing()却会绘图到form1窗体上,而BaiYeChuang却可以绘图到PaintBox1中这是什么原因?
2,怎么把位图Bitmap缩放到paintbox1的大小?
- C/C++ code
void __fastcall TImageEffect::BaiYeChuang(){ //百叶窗效果 int inum,icount,i,j; inum =100; //这是百叶窗的叶数 icount=m_Height/inum;//每叶的高度 for(i= 0;i<icount+1;i+=1) { for(j=0;j<=inum;j++) { Canvas->CopyRect(Rect(8,icount*j,m_Width+8,icount*j+i),Bitmap->Canvas,Rect(0,icount*j,m_Width,icount*j+i)); Sleep(1); //for (int blank=0;blank <90000;blank++); } }}//圆形效果void __fastcall TImageEffect::YuanXing(){ HRGN MyRgn; int j=sqrt(Bitmap-> Width*Bitmap-> Width+Bitmap-> Height*Bitmap-> Height)/2+2; for (int i=1;i <j;i++) { MyRgn=CreateEllipticRgn(Bitmap-> Width/2-i+8,Bitmap-> Height/2-i+8,Bitmap-> Width/2+i+8,Bitmap-> Height/2+i+8); SelectObject(Canvas-> Handle,MyRgn); Canvas-> Draw(8,8,Bitmap); DeleteObject(MyRgn); }}[解决办法]
[解决办法]
代码改一下,你首先说的为什么会画到窗体上,是因为Canvas指的就是当前窗体的画布。还有你要先设置好Bitmap的大小。实现的效果你自己调整。
- C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){Graphics::TBitmap* Bitmap1=new Graphics::TBitmap; Bitmap1->LoadFromFile("c:\\2.bmp"); Graphics::TBitmap* Bitmap =new Graphics::TBitmap; Bitmap->Canvas->CopyMode=cmSrcCopy; Bitmap->Width = PaintBox1->Width ; Bitmap->Height = PaintBox1->Height ; Bitmap->Canvas->CopyRect(PaintBox1->BoundsRect,Bitmap1->Canvas,Rect(0,0,Bitmap1->Width,Bitmap1->Height)); //百叶窗效果 int inum,icount,i,j; inum =100; //这是百叶窗的叶数 icount=PaintBox1->Height/inum;//每叶的高度 for(i= 0;i<icount+1;i+=1) { for(j=0;j<=inum;j++) { PaintBox1->Canvas->CopyRect(Rect(8,icount*j,PaintBox1->Width +8,icount*j+i),Bitmap->Canvas,Rect(0,icount*j,PaintBox1->Width ,icount*j+i)); Sleep(1); //for (int blank=0;blank <90000;blank++); } } delete Bitmap1; delete Bitmap;}//---------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender){Graphics::TBitmap* Bitmap1=new Graphics::TBitmap; Bitmap1->LoadFromFile("c:\\2.bmp"); Graphics::TBitmap* Bitmap =new Graphics::TBitmap; Bitmap->Canvas->CopyMode=cmSrcCopy; Bitmap->Width = PaintBox1->Width ; Bitmap->Height = PaintBox1->Height ; Bitmap->Canvas->CopyRect(PaintBox1->BoundsRect,Bitmap1->Canvas,Rect(0,0,Bitmap1->Width,Bitmap1->Height)); //PaintBox1->Canvas-> Draw(0,0,Bitmap); HRGN MyRgn; int j=sqrt(Bitmap-> Width*Bitmap-> Width+Bitmap-> Height*Bitmap-> Height)/2+2; for (int i=1;i <j;i++) { MyRgn=CreateEllipticRgn(Bitmap-> Width/2-i+8,Bitmap-> Height/2-i+8,Bitmap-> Width/2+i+8,Bitmap-> Height/2+i+8); SelectObject(PaintBox1->Canvas-> Handle,MyRgn); PaintBox1->Canvas-> Draw(8,8,Bitmap); DeleteObject(MyRgn); } delete Bitmap1; delete Bitmap;}//---------------------------------------