图片放大缩小的功能(VB)

coolgod 2006-10-08 11:09:05
图片的放大缩小,如大小超出picturebox的大小,出现滚动条,放大和缩小使用两个按钮,放大按钮和缩小按钮,我需要具体的代码,谢谢,
...全文
1419 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZOU_SEAFARER 2006-10-09
  • 打赏
  • 举报
回复
我说说我的看法
所谓放大就是把图片的像素拉开距离显示本来1 inch里面包含2000像素,那么如果你把这2000像素放在2 inch里面显示就好象放大了1倍了(空余点用前面的点填充),同样缩小也是一样的.隔点去掉像素.
coolgod 2006-10-09
  • 打赏
  • 举报
回复
其他人还有什么吗?
klever 2006-10-08
  • 打赏
  • 举报
回复
转的,没试过


VB5实现窗口图像缩放、滚动技巧

洪志全


Visual Basic是Windows平台中最常用的应用软件开发语言,窗口图像缩放、滚动是图像处理、多媒体数据库等应用软件开发中的基本功能。本文将介绍如何用VB 5.0实现地窗口图像缩放和滚动技巧,供读者在各种语言系统开发中参考。
一、获取图像
本文所介绍的图像缩放并没有对真正的图像进行缩放,而是复制一幅窗口图像的真实画面,对这个窗口图像附本进行局部缩放和滚动,获取窗口图像可使用Windows的API函数来实现。具体来说,实现窗口图像缩放、滚动需要用GetDeskTopWindow()函数获取桌面窗口句柄,再通过GetDC()函数转换为描述表句柄,则用BitBlt()函数把桌面图像复制到任意图形容器控件中,桌面图像复制完成后,再用ReleaseDC释放窗口描述表,各API函数的具体使用方法参见本文的
例子程序。本文所用的API函数包含在WIN95/98的GDI32.DLL和USER32.DLL动态链接库中,在使用时可通过VB5.0的TEXT VIEWER复制到所开发的应用程序中。
二、图像缩放
图像缩放显示的基本原理就是把原图像的一部分缩放后再送入窗口的图形容器控件中,在VB中可用内部命令PaintPicture来进行,语法格式为:
PaintPicturePic,DestX,DestY,DestWidth,DestHeight,ScrX,ScrY,ScrWidth,ScrHeight
其中,Pic为图片对象,如图形控件对象等;DestX,DestY 为目标图像起始坐标;
DestWidth,DestHeight 为目标图像幅面尺寸;ScrX,ScrY 为源图像起始坐标;
ScrWidth,ScrHeight 为源图像剪裁尺寸。该命令就是把一个源图像资源任意复制到指定的区域,其功能相当于API函数的BitBlt,但使用更简单,若复制时改变源图像的ScrWidth,ScrHeight或目标图像的DestWidth,DestHeight可使复制后的图像尺寸发生变化,实现窗口图像的缩放显示。若ScrWidth,ScrHeight或DestWidth,DestHeight为负值还可实现窗口图像的水平、垂直反转显示。因此,在把源图像送入目标图形容器控件时,若改变源图像的幅面尺寸,即可实现图像的缩放处理。
三、图像滚动
当载入图像尺寸大于图形控件窗口时,为了便于浏览、选取必须对窗口图像滚动操作。窗口图像滚动可通过水平滚动控件HScroll和垂直滚动控件VScroll来实现,通过控件的改变值HScroll.Value和VScroll.Value来控制PaintPicture命令中的源图像坐标ScrX和ScrY,即可实现窗口图像的滚动操作。
四、图像缩放、滚动实现
本文可对非压缩BMP位图进行缩放、滚动,非压缩BMP位图的宽度和高度在文件开始11H后的8个字节。若读者需要对其它图像格式(如JPG,TIF等)进行缩放操作,可根据本文介绍的方法对找出相应的图像高度和宽度即可,具体实现步骤如下:
1.执行“File>Projects”创建一新项目APPIMG.VBP,在FORM窗口中创建PictureBox、CommandButton、HScroll、VScroll等对象,调整各自位置,并设置各对象的属性如下:Form:Name = AppImage, ScaleMode = 1
PictureBox:Name = ImageWin, Appearance = 1-3D, ScaleMode = 3
CommandButton:Name = ZoomIn, Caption="Zoom In"
CommandButton:Name = ZoomOut, Caption="Zoom Out"
CommandButton:Name = ExitButton, Caption="Exit"
2.双击FORM窗口,并将下面程序输入到Form对象的Load事件中。该程序用于读取图像的宽度和高度,初始化常用参数,载入窗口图像,并将图像复制到FORM窗口的PictureBox图形控件容器中显示。
Private Sub Form_Load()
Dim FileName As String
FileName = "C:\SAMP.BMP"
Open FileName For Binary As #1
Get #1, 19, ImageWidth: Get #1, , ImageHeight 注释:读取位图的宽度和高度
Close #1DW = 15 * ImageWidth - ImageWin.Width 注释:将像点转换为Twip(微点)DH = 15 * ImageHeight - ImageWin.Height
ImageWin.Width = 15 * ImageWidth
ImageWin.Height = 15 * ImageHeight
AppImage.AutoRedraw = True
AppImage.Caption = FileName 注释:改变Form窗标题
HScroll1.SmallChange = 100 注释:设置滚动最小步距
VScroll1.SmallChange = 100
DX = ImageWin.Width: DY = ImageWin.Height 注释:设置复制图像尺寸
SX = ImageWin.Width: SY = ImageWin.Height
AMP = 1 注释:设置缩放比例为1
sWin = GetDesktopWindow() 注释:获取桌面窗口句柄
sDC = GetDC(sWin) 注释:转换为描述表句柄
hd = BitBlt(ImageWin.hdc, 0, 0, Image.Width, Image.Height, sDC, 0, 0, &HCC0020)hd = ReleaseDC(sWin, sDC) 注释:释放窗口描述表
AppImage.ImageWin = LoadPicture(FileName) 注释:载入图像显示
End Sub
3.在General对象的Declaration过程中声明本程序所使用的WIN95 API函数和和过程,以及各事件程序所使用的全局变量等。
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetDesktopWindow Lib "user32" () As LongPrivate Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongDim sWin, sDC, hd
Dim ImageWidth As Long, ImageHeight As Long
Dim DX, DY, SX, SY, PX, PY, DW, DH, MX, MY, X0, Y0, AMP
4.双击ImageWin对象,并在MouseMove事件和Mouse_down事件中输入下面程序,用于窗口图形的拖动滚动处理。
Private Sub ImageWin_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Button And vbLeftButton) > 0 Then 注释:拖动鼠标滚动图像
MX = HScroll1.Value + (X - X0)
MY = VScroll1.Value + (Y - Y0)
If MX > 0 And MX < HScroll1.Max Then HScroll1.Value = MX
If MY > 0 And MY < VScroll1.Max Then VScroll1.Value = MY
End If
End Sub
Private Sub ImageWin_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
X0 = X: Y0 = Y 注释:拖动鼠标初值
End Sub
5.在ZoomIn控件和ZoomOut的Click事件中输入下列程序,对窗口图像进行放大、缩小处理。

Private Sub ZoonIn_Click()
If AMP < 5 Then AMP = 2 * AMP 注释:放大系数小于5,则放大图像
AppImage.ImageWin.PaintPicture ImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
Private Sub ZoomOut_Click()
AppImage.ImageWin.Cls 注释:清除窗口图像
If AMP > 0.25 Then AMP = AMP / 2 注释:放大系数大于0.25,则缩小图像
AppImage.ImageWin.PaintPicture ImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
7.在HScroll控件和VScroll控件的Change事件中输入下面程序,对窗口图像进行滚动处理。

Private Sub HScroll1_Change()
PX = HScroll1.Value * DW / HScroll1.Max 注释:计算水平滚动位置
AppImage.ImageWin.PaintPicture ImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
Private Sub VScroll1_Change()
PY = VScroll1.Value * DH / VScroll1.Max 注释:计算垂直滚动位置
AppImage.ImageWin.PaintPicture ImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX,PY, SX, SY
End Sub
8.在ExitButton控件的Click事件中输入下面程序,用于结束程序、关闭窗口。
Private Sub ExitButton_Click()
End
End Sub

五、应用说明
窗口图像滚动是各种数据查询系统、多媒体图形数据库系统开发中的基本功能之一,本文用Windows API函数实现了窗口图像缩放、滚动,该方法可适用于Visual C++等语言。本文全部程序均在WIN98环境中Visual Basic 5.0下调试通过。
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧