Canvas->CopyRect 画不出来
我的FORM上有 两个IMAGE
IMAGE1我已经装载了图片。IMAGE2没有。
我用
TRect r1;
TRect r2;
Image2->Canvas->CopyMode =cmSrcCopy;
r1 = Rect(0, 0, Image1->Width, Image1->Height);
r2 = Rect(0, 0, Image2->Width, Image2->Height);
Image2->Canvas->CopyRect(r2, Image1->Canvas, r1);
Image2上显示出图片。
我再用
TRect r2;
TPrinter *prn=Printer();
prn->Canvas->CopyMode =cmSrcCopy;
r2 = Rect(0, 0, Image2->Width, Image2->Height);
prn->BeginDoc();
prn->Canvas->CopyRect(r2, Image2->Canvas, r2);
prn->EndDoc();
没有打印出来。怎么回事。
问题点数:50、回复次数:32Top
1 楼nofeal(无情)回复于 2001-09-24 16:33:47 得分 0
CopyRect() 例子:// 好象只支持Bitmap 型。 所以不行。
Graphics::TBitmap *Bitmap;
TRect MyRect, MyOther;
MyRect = Rect(10,10,100,100);
MyOther = Rect(10,111,100, 201);
Bitmap = new Graphics::TBitmap;
Bitmap->LoadFromFile("c:\\windows\\tartan.bmp");
Form1->Canvas->BrushCopy(MyRect, Bitmap, MyRect, clBlack);
Form1->Canvas->CopyRect(MyOther, Bitmap->Canvas, MyRect);
delete Bitmap;Top
2 楼asdmusic8(asdmusic8)回复于 2001-09-24 16:47:59 得分 0
我要把IMAGE2打印到打印机。
那它为什么能 从IMAGE2 到IMAGE3 而不能到打印机
TRect r1;
TRect r2;
Image3->Canvas->CopyMode =cmSrcCopy;
r1 = Rect(0, 0, Image2->Width, Image2->Height);
r2 = Rect(0, 0, Image3->Width, Image3->Height);
Image3->Canvas->CopyRect(r2, Image2->Canvas, r1);
Top
3 楼qing3962(有解)回复于 2001-09-24 16:57:19 得分 0
不可能吧??Top
4 楼asdmusic8(asdmusic8)回复于 2001-09-24 17:26:36 得分 0
to qing3962(一个不回家的人) 你试一下代码很简单。Top
5 楼whyjld(白痴)回复于 2001-09-24 17:35:59 得分 40
伙计,多加两分好吗?
这个问题虽然很简单就可以解决,但是我花了整整一天才找到原因,而且我相信很多人都找不到原因。我觉得应该值得多一点。
Image2->HandleType = bmDIBTop
6 楼asdmusic8(asdmusic8)回复于 2001-09-24 17:48:15 得分 0
没有这个属性吗Top
7 楼whyjld(白痴)回复于 2001-09-24 17:50:24 得分 0
什么意思?
写错了,你的用一个Graphics::TBitmap作为缓冲区。
先创建一个TBitmap,把图象拷到TBitmap内,设好属性,再拷到Printer上Top
8 楼asdmusic8(asdmusic8)回复于 2001-09-24 18:15:06 得分 0
to whyjld(白痴)
还是没有
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
TRect r1,r2;
TPrinter *prn=Printer();
pBitmap->Canvas->CopyMode =cmSrcCopy;
pBitmap->HandleType=bmDIB;
r1 = Rect(0, 0, Image1->Width, Image1->Height);
r2 = Rect(0, 0, Image1->Width*9, Image1->Height*9);
pBitmap->Canvas->CopyRect(r2,Image1->Canvas, r1);
prn->Canvas->CopyMode =cmSrcCopy;
r2 = Rect(0, 0,pBitmap->Width, pBitmap->Height);
prn->BeginDoc();
prn->Canvas->CopyRect(r2,pBitmap->Canvas, r2);
prn->EndDoc();
delete pBitmap;Top
9 楼whyjld(白痴)回复于 2001-09-24 18:19:45 得分 0
改的几处,你看看吧。
我要下班了,相信没有问题。
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
TRect r1,r2;
TPrinter *prn=Printer();
r1 = Rect(0, 0, Image1->Width, Image1->Height);
r2 = Rect(0, 0, Image1->Width*9, Image1->Height*9);
pBitmap->Width = Image1->Width * 9;
pbitmap->Height = Image1->Height * 9;
pBitmap->Canvas->CopyRect(r2,Image1->Canvas, r1);
pBitmap->HandleType=bmDIB;
r2 = Rect(0, 0,pBitmap->Width, pBitmap->Height);
prn->BeginDoc();
prn->Canvas->CopyRect(r2,pBitmap->Canvas, r2);
prn->EndDoc();
delete pBitmap; Top
10 楼asdmusic8(asdmusic8)回复于 2001-09-24 18:22:22 得分 0
除了 Image2->Picture->LoadFromFile("e:\\setup.bmp"); 可以改变IMAGE2 的实际尺寸(picture->Width,picture->Height)
还有没有其他方法。image2->Width=image2->Width*9 并没有改变实际尺寸当用
CopyRect 时还是显示的原来的尺寸空间。Top
11 楼asdmusic8(asdmusic8)回复于 2001-09-24 18:26:25 得分 0
打出来了,但是没有放大Top
12 楼whyjld(白痴)回复于 2001-09-25 08:43:37 得分 0
用这种方法吧
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
TRect r1,r2;
TPrinter *prn=Printer();
r1 = Rect(0, 0, Image1->Width, Image1->Height);
pBitmap->Width = Image1->Width;
pbitmap->Height = Image1->Height;
pBitmap->Canvas->CopyRect(r1,Image1->Canvas, r1);
pBitmap->HandleType=bmDIB;
r2 = Rect(0, 0,pBitmap->Width, pBitmap->Height);
prn->BeginDoc();
prn->Canvas->StretchDraw(r2, pbitmap);
prn->EndDoc();
delete pBitmap;
Top
13 楼asdmusic8(asdmusic8)回复于 2001-09-25 09:00:48 得分 0
这个也不能放大。而且如果我取 IMAGE2上的一部分,那我还得要把 pBitmap在拷一次。Top
14 楼asdmusic8(asdmusic8)回复于 2001-09-25 09:02:29 得分 0
我用LoadFromFile 来改变PICTURE的大小后,怎么把PICTURE 设为空。Top
15 楼whyjld(白痴)回复于 2001-09-25 09:12:29 得分 0
只取一部分在第一次从Image1到pBitmap的时候确定一部分就行。
另:打印机的分辨率远高于显示器,你乘9以后只要比原大打印大9倍就对了。Top
16 楼wilddragon(东瀛倭族自治州州长)回复于 2001-09-25 10:01:33 得分 0
哈哈Top
17 楼whyjld(白痴)回复于 2001-09-25 10:30:02 得分 0
清除图象
Image1->Picture->Assign(NULL);Top
18 楼asdmusic8(asdmusic8)回复于 2001-09-25 10:52:47 得分 0
没有比原大打印大9倍Top
19 楼whyjld(白痴)回复于 2001-09-25 10:54:42 得分 0
乘不乘9都一样?Top
20 楼asdmusic8(asdmusic8)回复于 2001-09-25 10:59:18 得分 0
恩Top
21 楼whyjld(白痴)回复于 2001-09-25 11:14:11 得分 0
你用的代码贴出来看看Top
22 楼asdmusic8(asdmusic8)回复于 2001-09-25 11:28:07 得分 0
就是你给我的Top
23 楼osnew(传输协议)回复于 2001-09-25 11:39:34 得分 0
要先使用GETDC()获得设备的Handle.详细情况,可查看SDK帮助。Top
24 楼Jerfly(飞飞虫)回复于 2001-09-25 12:05:47 得分 0
只需
prn->BeginDoc();
prn->Canvas->CopyRect(r2, Image2->Canvas, r2);
prn->Canvas->CopyRect(r2, Image2->Canvas, r2);
prn->EndDoc();
即可.
Top
25 楼Wingsun(孙春阳)回复于 2001-09-25 12:23:37 得分 5
我觉得,有一点你要注意的是,你的屏幕尺寸比起打印机的尺寸来说实在是太小了,所以你不能这样写
r2 = Rect(0, 0, Image2->Width, Image2->Height);
prn->BeginDoc();
prn->Canvas->CopyRect(r2, Image2->Canvas, r2);
prn->EndDoc();
我觉得你应该重新改写你的代码,最好你使用StretchDraw来完成你的打印任务。
你看看这儿的帖子吧!
http://www.csdn.net/expert/TopicView.asp?id=94108Top
26 楼whyjld(白痴)回复于 2001-09-25 12:27:06 得分 0
这句错了
r2 = Rect(0, 0,pBitmap->Width, pBitmap->Height);
应该是
r2 = Rect(0, 0,pBitmap->Width * 9, pBitmap->Height * 9);
Top
27 楼asdmusic8(asdmusic8)回复于 2001-09-25 13:12:42 得分 0
to whyjld(白痴) 还是不行Top
28 楼whyjld(白痴)回复于 2001-09-25 13:22:06 得分 0
你用的是2001-9-25 8:43:38的那段?Top
29 楼asdmusic8(asdmusic8)回复于 2001-09-25 13:31:52 得分 0
是Top
30 楼wk_knife(学习ORACLE)回复于 2001-09-25 14:36:18 得分 5
鄙人倒感觉,你的图形不在打印机的打印范围内。
Rect的起头别从0开始,从500-1000开始。
Top
31 楼hantao(憨豆)回复于 2001-09-25 16:02:58 得分 0
gzTop
32 楼wk_knife(学习ORACLE)回复于 2001-09-26 07:42:18 得分 0
此外,还有个刷子的问题,如果打印机不支持你所设的Brush类型,打印机是不会工作的。Top
相关问题
- Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1); What's meaning???
- copyrect(rect,canvas,rect)有什么用呢
- Canvas->Ellipse(100,110,200,210)画圆
- 请问斜线如何画(用控件,不是用canvas)
- 没有Canvas就不能画了么?苦恼中…………
- Canvas上的动画为什么不能正确显示?
- 如何在Image->Canvas画图时不闪烁???
- 为什么在GroupBox中用Canvas->Rectangle(...)画不出来?????
- Canvas中画线的问题!
- canvas




