www.pudn.com > imagescale---raw.zip > FrmMain.frm
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form FrmMain
Caption = "zyl910图像平滑放大"
ClientHeight = 4395
ClientLeft = 60
ClientTop = 345
ClientWidth = 5880
Icon = "FrmMain.frx":0000
LinkTopic = "Form1"
LockControls = -1 'True
ScaleHeight = 293
ScaleMode = 3 'Pixel
ScaleWidth = 392
StartUpPosition = 3 '窗口缺省
Begin MSComDlg.CommonDialog CDlgSave
Left = 900
Top = 300
_ExtentX = 847
_ExtentY = 847
_Version = 393216
CancelError = -1 'True
End
Begin MSComDlg.CommonDialog CDlgOpen
Left = 90
Top = 270
_ExtentX = 847
_ExtentY = 847
_Version = 393216
CancelError = -1 'True
End
Begin VB.CommandButton CmdScale
Caption = "生成(&c)"
Height = 300
Left = 5100
TabIndex = 10
Top = 0
Width = 780
End
Begin VB.ComboBox CboScale
Height = 300
Left = 3810
Style = 2 'Dropdown List
TabIndex = 9
Top = 0
Width = 1260
End
Begin VB.TextBox TxtScale
Alignment = 1 'Right Justify
BackColor = &H8000000F&
Height = 270
Left = 3090
Locked = -1 'True
TabIndex = 8
Text = "100%"
Top = 15
Width = 720
End
Begin VB.HScrollBar SolScale
Height = 240
LargeChange = 10
Left = 1590
Max = 30
Min = -30
TabIndex = 7
Top = 30
Width = 1500
End
Begin VB.CommandButton CmdSave
Caption = "保存(&S)"
Height = 300
Left = 780
TabIndex = 6
Top = 0
Width = 780
End
Begin VB.CommandButton CmdOpen
Caption = "打开(&O)"
Height = 300
Left = 0
TabIndex = 5
Top = 0
Width = 780
End
Begin VB.PictureBox PicRect
Height = 2805
Left = 120
ScaleHeight = 183
ScaleMode = 3 'Pixel
ScaleWidth = 301
TabIndex = 0
Top = 390
Width = 4575
Begin VB.PictureBox PicClip
BackColor = &H8000000C&
BorderStyle = 0 'None
Height = 1605
Left = 450
ScaleHeight = 107
ScaleMode = 3 'Pixel
ScaleWidth = 229
TabIndex = 3
Top = 150
Width = 3435
Begin VB.PictureBox PicData
AutoRedraw = -1 'True
BorderStyle = 0 'None
Height = 240
Left = 480
ScaleHeight = 16
ScaleMode = 3 'Pixel
ScaleWidth = 16
TabIndex = 4
Top = 330
Width = 240
End
End
Begin VB.HScrollBar HSol
Height = 225
Left = 180
TabIndex = 2
Top = 1860
Width = 3495
End
Begin VB.VScrollBar VSol
Height = 1815
Left = 4140
TabIndex = 1
Top = 150
Width = 315
End
End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Const MyTitle = "zyl910图像平滑放大"
Private DIBData As ClsDIB
Private DIBWork As ClsDIB
Private ScaleNum As Single
Private Sub SolNum()
If PicData.Width > PicClip.Width Then
HSol.Max = PicData.Width - PicClip.Width
HSol.LargeChange = PicClip.Width
If HSol.Value > HSol.Max Then HSol.Value = HSol.Max
HSol.Enabled = True
Else
HSol.Value = 0
HSol.Enabled = False
End If
If PicData.Height > PicClip.Height Then
VSol.Max = PicData.Height - PicClip.Height
VSol.LargeChange = PicClip.Height
If VSol.Value > VSol.Max Then VSol.Value = VSol.Max
VSol.Enabled = True
Else
VSol.Value = 0
VSol.Enabled = False
End If
End Sub
Private Sub CmdOpen_Click()
Static fShow As Boolean
If fShow = False Then
CDlgOpen.InitDir = App.Path
End If
On Error GoTo ErrLoad
CDlgOpen.ShowOpen
On Error GoTo 0
If fShow = False Then
CDlgOpen.InitDir = vbNullString
fShow = True
End If
Dim DIBTemp As New ClsDIB
If BasDIB.DIBLoadMap(DIBTemp, CDlgOpen.FileName, True, 24) Then
Set DIBData = DIBTemp
DIBWork.Free
'Debug.Print DIBData.Width; DIBData.Height
PicData.Width = DIBData.Width
PicData.Height = DIBData.Height
DIBData.PutTo PicData.hDC, 0, 0
HSol.Value = 0
VSol.Value = 0
SolNum
PicData.Refresh
Else
MsgBox "错误的图像文件", vbCritical
End If
Set DIBTemp = Nothing
Exit Sub
ErrLoad:
On Error GoTo 0
End Sub
Private Sub CmdSave_Click()
Dim DIBTemp As ClsDIB
If DIBWork.DataPtr Then
Set DIBTemp = DIBWork
ElseIf DIBData.DataPtr Then
Set DIBTemp = DIBData
Else
MsgBox "没有处理的图片", vbCritical
Exit Sub
End If
Static fSave As Boolean
If fSave = False Then
CDlgOpen.InitDir = App.Path
End If
On Error GoTo ErrSave
CDlgSave.ShowSave
On Error GoTo 0
If fSave = False Then
CDlgSave.InitDir = vbNullString
fSave = True
End If
If DIBTemp.SaveBMP(CDlgSave.FileName) Then
'
Else
MsgBox "保存失败", vbCritical
End If
Set DIBTemp = Nothing
Exit Sub
ErrSave:
On Error GoTo 0
End Sub
Private Sub CmdScale_Click()
If DIBData.DataPtr = 0 Then
MsgBox "请打开图片", vbCritical
Exit Sub
End If
Dim W As Long, H As Long
W = DIBData.Width * ScaleNum
H = DIBData.Height * ScaleNum
If W < 1 Then W = 1
If H < 1 Then H = 1
Dim DIBTemp As New ClsDIB
Dim t As Long
Me.MousePointer = vbHourglass
t = timeGetTime
If DIBScale(CboScale.ListIndex, DIBTemp, DIBData, W, H) = False Then
Set DIBTemp = Nothing
MsgBox "处理失败", vbCritical
Exit Sub
End If
t = timeGetTime - t
Me.MousePointer = vbDefault
Me.Caption = MyTitle & " 处理时间:" & Format(t / 1000, "##,###,##0.000") & "秒"
Set DIBWork = DIBTemp
Set DIBTemp = Nothing
PicData.Width = DIBWork.Width
PicData.Height = DIBWork.Height
DIBWork.PutTo PicData.hDC
SolNum
PicData.Refresh
End Sub
Private Sub Form_Load()
PointInit
SolScale.Value = 10
PicRect.Move 0, CmdOpen.Height
PicClip.Move 0, 0
PicData.Move 0, 0
HSol.Left = 0
VSol.Top = 0
HSol.Height = 16
VSol.Width = 16
Dim I As Long
For I = ScaleModeConst.SMC_Min To ScaleModeConst.SMC_Max
CboScale.AddItem ScaleModeName(I)
Next I
CboScale.ListIndex = ScaleModeConst.SMC_BiliNear
CDlgOpen.Filter = "图像文件(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif"
CDlgOpen.Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
CDlgSave.Filter = "BMP位图(*.bmp)|*.bmp"
CDlgSave.Flags = cdlOFNPathMustExist Or cdlOFNOverwritePrompt Or cdlOFNHideReadOnly
Set DIBData = New ClsDIB
Set DIBWork = New ClsDIB
End Sub
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then Exit Sub
On Local Error Resume Next
PicRect.Move PicRect.Left, PicRect.Top, Me.ScaleWidth - PicRect.Left, Me.ScaleHeight - PicRect.Top
PicClip.Move PicClip.Left, PicClip.Top, PicRect.ScaleWidth - VSol.Width, PicRect.ScaleHeight - HSol.Height
HSol.Move HSol.Left, PicClip.Height, PicClip.Width, HSol.Height
VSol.Move PicClip.Width, VSol.Top, VSol.Width, PicClip.Height
SolNum
On Error GoTo 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set DIBData = Nothing
Set DIBWork = Nothing
PointFree
End Sub
Private Sub HSol_Change()
PicData.Left = -HSol.Value
End Sub
Private Sub HSol_Scroll()
PicData.Left = -HSol.Value
End Sub
Private Sub SolScale_Change()
ScaleNum = 2 ^ (SolScale.Value / SolScale.LargeChange)
TxtScale.Text = Format$(ScaleNum * 100, "##0.00") + "%"
End Sub
Private Sub SolScale_Scroll()
SolScale_Change
End Sub
Private Sub VSol_Change()
PicData.Top = -VSol.Value
End Sub
Private Sub VSol_Scroll()
PicData.Top = -VSol.Value
End Sub