高分求一款能替代Picturebox 的第三方控件

lgj1012II 2004-10-06 10:51:13
本来找到了 ImagXpress 7.0 但是始终无法正常用注册机注册,因为是用想用VB开发的在WEB页面上高速度处理大图片的一个Activex,其他的控件也用过了要么速度太慢要么太大动不动就是1MB,web上用起来肯定不合适,不知道有没有那位兄弟能提供一个好点的能高速显示图片(jpg,tiff[单page])而且能比较快的 resize 保存图片的第三方控件啊?
...全文
172 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lgj1012II 2004-10-11
再顶
回复
lgj1012II 2004-10-10
顶!
回复
GGL123 2004-10-09
关注。
回复
jam021 2004-10-09
关注,帮你顶!
回复
flyintosky555 2004-10-08
http://www.wave12.com 完美解决方案
回复
haohaohappy 2004-10-08
一,利用第三方控件实现
  在“工程”中选取“部件”,将WANG 图像编辑控制添加到工具箱中,并在窗体中绘制出合适大小,按鼠标右键,选取特性,设置好各种参数后加入程序代码就行了,使用非常简单,如果需要,在程序中也可加入一定的图像编辑功能。采用第三方控件,功能较强,程序编制也简单一些,不失为一种好方法。但存在一些其他问题,比如本文采用的WANG 图像编辑控制,在使用中就经常出现“类没有注册”的错误,解决此问题,要么修改注册表,要么重装系统,很麻烦,所以在要求的功能不是很多的情况下,用第二种方法比较合适。以下就是使用WANG控件的程序,可以看出,代码很简单。Private Sub imgedit1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode '定义功能键,+,-用以缩放图像
Case vbKeyAdd
ImgEdit1.Zoom=imgedit1.zoom*1.2
Case vbKeySubtract
ImgEdit1.Zoom=imgedit1.zoom/1.2
End Select
ImgEdit1.Refresh
End Sub

Private Sub Form_Resize()
ImgEdit1.Top = 0
ImgEdit1.Left = 0
ImgEdit1.Height = Form1.ScaleHeight
ImgEdit1.Width = Form1.ScaleWidth
End Sub

Private Sub Form_Load()
imgedit1.image="a:\ddd.jpg"
ImgEdit1.ImagePalette = 3
ImgEdit1.Display
End Sub

二是利用VB的picturebox和滚动条控件编程实现
  PICTUREBOX控件能支持许多种图像格式,但没有缩放功能并且不自动添加滚动条,所以必须自行编程实现。
  应用程序使用两个图片框,一个作为包容器,可称之为父图片框,另一个作为子图片框显示图形,配合滚动条控件在父图片框内移动子图片框就可实现画面的滚动。
  VB中提供了paintpicture方法,可以在窗体、图片框上的任何地方绘制图形,语法为 object.PaintPicture picture, x1, y1, width1, height1, x2, 2, width2, height2, opcode,其中x1,y1为指定在 object 上绘制 picture 的目标坐标;width1,height1 指定 picture 的目标宽度和高度;x2,y2指定 icture 内剪贴区的坐标 width2,height2 指定 picture 内剪贴区的源宽度和高度,当我们重新设定width1,height1时,就可以在子图片框内实现平滑的缩放图片。虽然Paintpicture可以代替bitblt windows API函数,但没有API的执行速度快,如程序对速度的要求比较高,可用API函数代替paintpicture方法 。在窗体中先画出picture1作为父图片框,然后在其中中画出picture2,在窗体中再画出滚动条,picture2的autosize属性为TRUE,borderstyle属性为0,autoredraw属性为true,滚动条的largechange和smallchange属性设为合适大小,窗体既设置完毕。
  以下为可以直接使用的完整程序,可以用光标键移动画面,也可以拖放方式移动画面;用加减号缩放画面。
Public c1, c2, c3, c4 As Integer
Public tf, d1, d2, d3, d4, blf As Integer
Public yk, yg As Long

Private Sub Form_Load()
c1 = Form1.Width
c2 = Form1.Height
blf = 100
Picture2.Picture = LoadPicture("a:\ddd.jpg")
yk = Picture2.Width
yg = Picture2.Height
End Sub

Private Sub Form_Resize()
If Width > 1500 And Height > 1170 Then
c3 = Form1.Width - c1
c4 = Form1.Height - c2
Picture1.Move Picture1.Left, Picture1.Top, Picture1.Width + c3, Picture1.Height + c4
c1 = Form1.Width
c2 = Form1.Height
Call p
End If
Picture2.SetFocus
End Sub
'以拖放方式滚动画面
Private Sub Picture2_DragDrop(Source As Control, x As Single, y As Single)
If Picture2.Height > Picture1.Height Then '通过计算鼠标移动位置,调用vscroll_change事件
cccc = VScroll1.Value + (d2 - y) '移动画面
If cccc <= 0 Then
cccc = 0
End If
If cccc >= VScroll1.Max Then
cccc = VScroll1.Max
End If
VScroll1.Value = cccc
End If
If Picture2.Width > Picture1.Width Then
cccc1 = HScroll1.Value + (d1 - x)
If cccc1 <= 0 Then
cccc1 = 0
End If
If cccc1 >= HScroll1.Max Then
cccc1 = HScroll1.Max
End If
HScroll1.Value = cccc1
End If
End Sub
'设置功能键,光标键移动画面,加减号缩放画面
Private Sub Picture2_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
HScroll1.Value = IIf(HScroll1.Value - HScroll1.SmallChange < 0, 0, HScroll1.Value -
HScroll1.SmallChange)
Case vbKeyRight
If Picture2.Width > Picture1.Width Then
HScroll1.Value = IIf(HScroll1.Value + HScroll1.SmallChange > HScroll1.Max, HScroll1.Max,
HScroll1.Value + HScroll1.SmallChange)
End If
Case vbKeyUp
VScroll1.Value = IIf(VScroll1.Value - VScroll1.SmallChange < 0, 0, VScroll1.Value -
VScroll1.SmallChange)
Case vbKeyDown
If Picture2.Height > Picture1.Height Then
VScroll1.Value = IIf(VScroll1.Value + VScroll1.SmallChange > VScroll1.Max, VScroll1.Max,
VScroll1.Value + VScroll1.SmallChange)
End If
Case vbKeyAdd
If blf < 150 Then
blf = blf + 25
Call fs(blf)
End If
Case vbKeySubtract
If blf > 50 Then
blf = blf - 25
Call fs(blf)
End If
End Select
End Sub

Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
d1 = x
d2 = y
Picture2.Drag 1
Set Picture2.DragIcon = LoadPicture("a:\plane.ico")
End Sub

Sub p()'画面和滚动条重设置程序
Picture2.Move 0, 0
HScroll1.Top = Picture1.Height + Picture1.Top
HScroll1.Left = Picture1.Left
HScroll1.Width = Picture1.Width
VScroll1.Top = Picture1.Top
VScroll1.Left = Picture1.Width + Picture1.Left
VScroll1.Height = Picture1.Height
HScroll1.Max = (Picture2.Width - Picture1.Width)
VScroll1.Max = (Picture2.Height - Picture1.Height)
VScroll1.Visible = (Picture1.Height < Picture2.Height)
HScroll1.Visible = (Picture1.Width < Picture2.Width)
End Sub

Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
Picture2.SetFocus
End Sub
Private Sub HSCROLL1_Change()
Picture2.Left = -HScroll1.Value
Picture2.SetFocus
End Sub

Sub fs(bl1 As Variant) '画出缩放
Dim bl As Variant
bl = bl1 / 100
Form1.MousePointer = vbHourglass
Picture2.Width = yk * bl
Picture2.Height = yg * bl
Picture2.Refresh
Picture2.PaintPicture Picture2.Picture, 0, 0, yk * bl, yg * bl, 0, 0, yk, yg
Call p
If VScroll1.Visible Then
VScroll1.Value = IIf(VScroll1.Value * bl > VScroll1.Max, VScroll1.Max, VScroll1.Value * bl)
End If
If HScroll1.Visible Then
HScroll1.Value = IIf(HScroll1.Value * bl > HScroll1.Max, HScroll1.Max, HScroll1.Value * bl)
End If
Form1.MousePointer = vbDefault
End Sub
本文的两例程序均在VB5.0中使用通过。

希望对你有帮助
回复
lgj1012II 2004-10-08
谢谢楼上各位老大,Picturebox实在是无法满足要求太慢...慢的寒心.呵呵 :) 而且对Tiff支持也不好
回复
junki 2004-10-07
VB本来就慢,resize 保存图片就更慢了
考虑用vc语言吧
回复
lgj1012II 2004-10-07
Kodak 的不支持多线程啊...Activex里面不能用郁闷
回复
rainstormmaster 2004-10-07
用imgedit控件试试
回复
lgj1012II 2004-10-07
我UP啊怎么就没人知道啊.....
回复
lgj1012II 2004-10-07
自己UP
回复
ryuginka 2004-10-07
up
回复
lgj1012II 2004-10-07
有现成的第三方控件,各项要求都能满足,而且现在自己用VC做来不急了,
回复
badboy168 2004-10-06
唉~!我也一直在寻寻密密呀~!~!先顶一下
回复
发动态
发帖子
控件
创建于2007-09-28

1422

社区成员

VB 控件
申请成为版主
社区公告
暂无公告