各位大虾:在下有礼了!(100分)

  • 主题发起人 主题发起人 dear
  • 开始时间 开始时间
D

dear

Unregistered / Unconfirmed
GUEST, unregistred user!
问题1:能否把TPanel的一个区域,拷贝成一个位图,然后打印呢!
问题2:有一个bitmap,放在一个TImage中,stretch==true,现在bitmap可以随着TImage一块
变大变小,可有个问题,当TImage缩小到一定程度!bitmap会严重失真,所以我想问一下各位
有没有什么方法使图象在放大缩小时不失真?
谢谢!
 
1.当然可以。
2.没注意过。
 
1.不行,但可以用Timage来替代TPanel
2.没办法!这是矢量图和位图的区别了!
矢量图放大缩小都不会失真,而位图则不行。
 
1:可以。
FDC:=GetDC(0);
CV:= TCanvas.Create;
CV.Handle:= FDC;
//CV是整个屏幕的画布,想拷什么随你。
2:可以,但比较麻烦。
用GetDIBits得到位图数据的头,选择一个压缩算法,在下认为Bi-Cubic失真较小。
 
1: 当然可以,而且非常简单:
假设你的panel为mypanel,在mypanel上放一个label, 如 mylabel
设置:
mylabel.align:=alClient;
mylabel.caption:='';
mylabel.transparent:=true;
这样,你会看到mylabel充满整个mypanel,而且是透明的,你对mylabel.canvas
的任何操作看起来就象对mypanel的"canvas"进行操作一样(panel是没有canvas的)
所以 myimage.canvas.copyrect(rect(0,0,100,100),mylabel.canvas,rect(0,0,100,100));
就将mypanel的(0,0,100,100)区域COPY到myimage中了,你可以把它做任何处理,当然也包括打了 !!
2:" 当TImage缩小到一定程度!bitmap会严重失真:"
这是当然的,就算你用 photoshop , ACDSee来看图,缩小到一定程度也会失真.
放大也是如此.点阵图就是这样的.


所以我想问一下各位
有没有什么方法使图象在放大缩小时不失真?
 
可以试试用,TPanel 的PaintTo
 
大家看清除了,不要改变我的先题条件!!!!!!!!
让我们就事论事!!!!!

十三郎:你的方法是可以,但如果我的Panel很大,用到了SCROLLBOX,那么按你的情况
我就不能打印到我的整个Panel了,
周键;你的方法我试试看再说!
 
1: 当然可以,而且非常简单:
假设你的panel为mypanel,在mypanel上放一个label, 如 mylabel
设置:
mylabel.align:=alClient;
mylabel.caption:='';
mylabel.transparent:=true;
这样,你会看到mylabel充满整个mypanel,而且是透明的,你对mylabel.canvas
的任何操作看起来就象对mypanel的"canvas"进行操作一样(panel是没有canvas的)
所以 myimage.canvas.copyrect(rect(0,0,100,100),mylabel.canvas,rect(0,0,100,100));
就将mypanel的(0,0,100,100)区域COPY到myimage中了,你可以把它做任何处理,当然也包括打了 !!
2:" 当TImage缩小到一定程度!bitmap会严重失真:"
这是当然的,就算你用 photoshop , ACDSee来看图,缩小到一定程度也会失真.
放大也是如此.点阵图就是这样的.
 

1.你把这部分截下来就是了。
 
1。 可以
(1)panel1.Brush.Bitmap.Canvas.CopyRect(..,..,..);拷贝成一个位图,然后打印
(2)TPanel.PaintTo(...);
2. 限制用户的缩放比例,acdsee也不允许无限缩小
 
第一个问题:
用bitblt行吗?
第二个问题:
点位图放大和缩小的系数很大时都会严重失真!(矢量图不会失真)。
 
cat.yy:
panel1.Brush.Bitmap.Canvas.CopyRect(..,..,..);这样做是把其它Canvas的东东拷贝到
panel上来!!!!!!!!!!1
我试用了CopyRect,但编译时出错:panel是不能接通的!!!
 
dear:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
1)agree copyrect
2)位图在缩放时必然要失去一些信息的,stretch==true时,假设你横向放大3倍,tbitmap会在水平方向上把每个
象素扩展为相同值的3个象素,所以失真严重,你可以在原图中相临的点间做插值,这样就可
以稍微好一些。
 
Panel.PaintTo就可以

至于缩放还得自己想算法
 
失真用插值来补偿..
可以完全插值或者抽点插值/
 
多人接受答案了。
 
后退
顶部