您的位置:程序门 -> vb ->



请教各位专家


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教各位专家
发表于:2007-04-20 11:22:22 楼主
请教各位专家:
        我现在想把一幅自己在picturebox里绘制的图片放大,并显示出来。使用painpicture的话,图片只能显示一部分,现在想在内存里将图片放大,放入一个加滚动条的picturebox里查看。查出来的资料说使用bitblt,,有没有其他的方法呢?
发表于:2007-04-20 12:10:421楼 得分:0
方法当然有啊,你可以在内存中创建一个位图,然后你想放大,可以说想干什么就干什么。
然后就是如何将位图加载到picturebox了,但如何将内存的位图加载到控件中会有点麻烦。
应该有其它方法吧。

up
发表于:2007-04-23 10:28:552楼 得分:0
各位专家,现在主要想这么做
1     将已画好的图在内存里放大
2     将放大后的图读入一个picturebox控件内
        请问应该怎么做呢?可否给出点源码?谢谢各位。
发表于:2007-04-23 17:48:033楼 得分:0
没有必要去创建一个什么所谓的 "内存图片 ",你直接用个image控件,visible设置成false就可以了.内存占用量也差不多少.

具体实现:
放一个image控件加载原图,控件设为不可见,然后前面放一个picture控件作为显示.
缩放和贴图直接使用picture控件的paintpicture方法,该方法可以直接从image上的指定位置截取指定大小的画面,并在picture的指定位置用指定大小显示出来.
也就是说,缩放和贴图都在一起搞定了.
还有,paintpicture方法的速度和bitble几乎是一样的.
发表于:2007-04-26 10:09:434楼 得分:0
这种方法不行,因为原图就很大,image控件放不下,这样你画图的话,只能取得能显示的部分,而不是全图,再用paintpicture放大的话,就只能方法这一部分?问题没有解决。
发表于:2007-04-26 13:17:205楼 得分:0
//这种方法不行,因为原图就很大,image控件放不下,这样你画图的话,只能取得能显示的部分,而不是全图,再用paintpicture放大的话,就只能方法这一部分?问题没有解决。

除了屏幕上的内容,用户还能看到什么?你只需处理需要放大的部分,然后显示即可,剩下的工作就是处理鼠标事件了
发表于:2007-04-26 14:29:316楼 得分:0
//这种方法不行,因为原图就很大,image控件放不下,这样你画图的话,只能取得能显示的部分,而不是全图,再用paintpicture放大的话,就只能方法这一部分?问题没有解决。

不如你直接把image设置为 "适应图象大小 ",然后把它剪切到pic里去

再放两个滚动条.......由滚动条控制image的坐标......

以前我有这样做过.......
发表于:2007-04-30 15:24:047楼 得分:0
现在这个图是由2000个左右的井,用点表示,由于地址相差比较大,所以在图上显示出来的是一堆堆的点,但是把点全部显示的图以经很大了,是画出来的。现在用户需要放大了看,所以这个图会非常的大,如果在picturebox上直接放大的话,显示不了全部的图,保存时只能保存显示的这一部分。如果不保存为图,是不能利用两个picturebox控件加滚动条来显示全部的图,现在的问题归结为,将现在画好的图放大,并且全图保存为下来(大图),这样才可以利用两个滚动的方式来看全部的图。如何将图放大并保存呢?用两个控件放大的方法不行,只能保存显示的那一部分。
发表于:2007-04-30 16:07:228楼 得分:0
不能用两个picutrebox嵌套么,p2在p1里面,p2的大小就是图的大小,然后在p1中加滚动条
发表于:2007-05-08 08:25:359楼 得分:0
这种办法很对,但首先得是要把图放大,现在的图已经很大了,用户还需要放大,这样屏幕就会显示不下,两个picturebox的办法,首先你要有图,呵呵。现在的问题不是如何显示一个大图,而是如何将现在这个图放大并保存。用鼠标选择只能看一部分,现在用户需要的是整张图全部放大来看,所以选择一部分放大的办法没有用。
        简单来说就是windows里的画图里有个放大镜,就是这个功能怎么实现。呵呵。
发表于:2007-05-29 09:14:4310楼 得分:0
这个问题已经解决了,应用api可以很好的解决这个问题。
            private   declare   function   getdc   lib   "user32 "   (byval   hwnd   as   long)   as   long
private   declare   function   stretchblt   lib   "gdi32 "   (byval   hdc   as   long,   byval   x   as   long,   byval   y   as   long,   byval   nwidth   as   long,   byval   nheight   as   long,   byval   hsrcdc   as   long,   byval   xsrc   as   long,   byval   ysrc   as   long,   byval   nsrcwidth   as   long,   byval   nsrcheight   as   long,   byval   dwrop   as   long)   as   long

private   declare   function   getdesktopwindow   lib   "user32 "   ()   as   long
private   declare   function   getcursorpos   lib   "user32 "   (lppoint   as   pointapi)   as   long
private   declare   function   getdevicecaps   lib   "gdi32 "   (byval   hdc   as   long,   byval   nindex   as   long)   as   long
private   const   horzres   =   8
private   const   vertres   =   10


private   type   pointapi
        x   as   long
        y   as   long
end   type
private   type   rect
        left   as   long
        top   as   long
        right   as   long
        bottom   as   long
end   type


快速检索

最新资讯
热门点击