www.pudn.com > imagescale---raw.zip > Form1.frm
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 6795
ClientLeft = 60
ClientTop = 345
ClientWidth = 9480
Icon = "Form1.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 453
ScaleMode = 3 'Pixel
ScaleWidth = 632
StartUpPosition = 2 '屏幕中心
Begin MSComDlg.CommonDialog CD
Left = 8520
Top = 2520
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.CommandButton Command2
Caption = "平滑缩放处理"
Height = 375
Left = 8040
TabIndex = 7
Top = 1800
Width = 1335
End
Begin VB.TextBox txtMag
Alignment = 2 'Center
Height = 270
Left = 8400
Locked = -1 'True
TabIndex = 6
Text = "1"
Top = 1320
Width = 735
End
Begin VB.HScrollBar HSBMag
Height = 255
LargeChange = 10
Left = 8040
Max = 50
Min = 1
TabIndex = 5
Top = 1080
Value = 20
Width = 1335
End
Begin VB.CommandButton Command1
Caption = "选择图片"
Height = 375
Left = 8040
TabIndex = 4
Top = 120
Width = 1335
End
Begin VB.HScrollBar HorzSB
Enabled = 0 'False
Height = 255
Left = 0
TabIndex = 3
Top = 6480
Width = 7695
End
Begin VB.VScrollBar VertSB
Enabled = 0 'False
Height = 6495
Left = 7680
TabIndex = 2
Top = 0
Width = 255
End
Begin VB.Frame Frame1
Appearance = 0 'Flat
BackColor = &H00000000&
BorderStyle = 0 'None
Caption = "Frame1"
ForeColor = &H80000008&
Height = 6495
Left = 0
TabIndex = 0
Top = 0
Width = 7695
Begin VB.PictureBox PIC
AutoRedraw = -1 'True
AutoSize = -1 'True
BackColor = &H00000000&
BorderStyle = 0 'None
Height = 5415
Left = 0
ScaleHeight = 361
ScaleMode = 3 'Pixel
ScaleWidth = 513
TabIndex = 1
Top = 0
Width = 7695
Begin VB.PictureBox P2
AutoRedraw = -1 'True
AutoSize = -1 'True
BackColor = &H00000000&
BorderStyle = 0 'None
Height = 1455
Left = 2280
ScaleHeight = 97
ScaleMode = 3 'Pixel
ScaleWidth = 129
TabIndex = 10
Top = 3000
Visible = 0 'False
Width = 1935
End
Begin VB.PictureBox P1
AutoRedraw = -1 'True
BackColor = &H00000000&
BorderStyle = 0 'None
Height = 1455
Left = 120
ScaleHeight = 97
ScaleMode = 3 'Pixel
ScaleWidth = 129
TabIndex = 9
Top = 3000
Visible = 0 'False
Width = 1935
End
End
End
Begin VB.Label Label2
Alignment = 2 'Center
Height = 375
Left = 7920
TabIndex = 11
Top = 2280
Width = 1575
End
Begin VB.Label Label1
Alignment = 2 'Center
Caption = "缩放比例选择(0.1--2.0)"
Height = 375
Left = 8040
TabIndex = 8
Top = 720
Width = 1455
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Base 1
DefLng A-W
DefSng X-Z
Private Sub GeneratePalBGRs()
GETDIBS P1.Image
' Save 2 copies of palette
PalSize = 4 * PICW * PICH ' Bytes
'CopyMemory PalBGR(1, 1, 1, 2), PalBGR(1, 1, 1, 1), PalSize
CopyMemory PalBGR(1, 1, 1, 3), PalBGR(1, 1, 1, 1), PalSize
End Sub
Private Sub GETDIBS(ByVal PICIM As Long)
' PICM is PIC.Image - handle to PIC picbox
On Error GoTo DIBError
'Get info on picture loaded into PIC
GetObjectAPI PICIM, Len(bmp), bmp
NewDC = CreateCompatibleDC(0&)
OldH = SelectObject(NewDC, PICIM)
' Set up bm struc for GetDIBits & StretchDIBits
With bm.bmiH
.biSize = 40
.biwidth = bmp.bmWidth
.biheight = bmp.bmHeight
.biPlanes = 1
.biBitCount = 32 ' Sets up BGRA pixels
.biCompression = 0
BytesPerScanLine = ((((.biwidth * .biBitCount) + 31) \ 32) * 4)
PadBytesPerScanLine = _
BytesPerScanLine - (((.biwidth * .biBitCount) + 7) \ 8)
.biSizeImage = BytesPerScanLine * Abs(.biheight)
End With
' Set PalBGR to receive color bytes
ReDim PalBGR(4, PICW, PICH, 3) As Byte
' Load color bytes to 1st third of PalBGR
ret = GetDIBits(NewDC, PICIM, 0, PICH, PalBGR(1, 1, 1, 1), bm, 1)
' Clear mem
SelectObject NewDC, OldH
DeleteDC NewDC
Exit Sub
'==========
DIBError:
MsgBox "Error"
On Error GoTo 0
End Sub
Private Sub Command1_Click()
Erase PalBGR
CD.Filter = "Pictures (*.bmp *.gif *.jpg *.wmf *.ico *.cur)|*.bmp;*.gif;*.jpg;*.wmf;*.ico;*.cur|All files|*.*"
CD.ShowOpen
INIT_PIC
PIC.Visible = True
'/////////////////////////////////////
Dim w As Long
Dim h As Long
Dim r As Long
P2.Picture = LoadPicture(CD.FileName)
w = P2.Width
h = P2.Height
If w > 800 Or h > 800 Then
r = MsgBox("图像太大读入和处理速度较慢!是否继续?", vbQuestion + vbYesNo + vbDefaultButton2, "提醒")
If r = vbNo Then
PIC.Picture = LoadPicture()
Exit Sub
End If
End If
Form1.Caption = "快速平滑缩放演示--" & CD.FileName & " ( " & w & " × " & h & " )"
P1.Width = w * 2
P1.Height = h * 2
Set P1.Picture = Nothing
P1.BackColor = 0 'P2.Point(0, 0)
BitBlt P1.HDC, w / 2, h / 2, w, h, P2.HDC, 0, 0, vbSrcCopy
' P1.PaintPicture P2.Picture, (l - P2.Width) \ 2, (l - P2.Height) \ 2, P2.Width, P2.Height, 0, 0
'PIC.Picture = P1.Image
'///////////////////////////////////////
PIC.Picture = P2.Image
PICW = PIC.ScaleWidth
PICH = PIC.ScaleHeight
SetPICScrollBars
PICW = P1.ScaleWidth
PICH = P1.ScaleHeight
iXp = PICW / 2
iYp = PICH / 2
MousePointer = vbHourglass
'Refresh
GeneratePalBGRs
'---------------------
'ShowPalBGR 2
MousePointer = vbDefault
End Sub
Private Sub Command2_Click()
Dim t
PIC.Visible = False
PIC.Picture = P1.Image
t = timeGetTime
ASM_Magnify
Label2.Caption = "耗时:" & CStr(timeGetTime - t) & " 毫数"
SetPICScrollBars
End Sub
Private Sub Form_Load()
Form1.Caption = "快速平滑缩放演示(图像大小最好在800×800之内)"
INIT_PIC
HSBMag.Min = 1
HSBMag.Max = 20
HSBMag.SmallChange = 1
HSBMag.LargeChange = 1
HSBMag.Value = 10
zMag = HSBMag.Value / 10
txtMag.Text = Str$(zMag)
ReDim PalLineCopy(1, 1)
Get_ASM_Code
End Sub
Private Sub Get_ASM_Code()
I_ASM "5589E581EC780000005756538B5D08FF338F45FCFF73048F45F8FF73088F45F4FF730C8F45F0FF73108F45ECFF" & _
"73148F45E8FF73188F45E48B450C8945D88B45108945D48B45148945BCB80A0000008945ACD9E8DB45BCDB45AC" & _
"DEF9DEF9D95DBC8B45F88B5DFCF7E38945E08B45FCC1E0048945DC8B45E825FF0000008945C08B45E82500FF00" & _
"00C1E8088945C48B45E8250000FF00C1E8108945C8DB45F8D945D4DEE9D95DD4B8020000008945B0D9E8DB45B0" & _
"DEF9D95DB08B45E43D00000000750AE81F000000E9110000003D01000000750AE826000000E9000000005B5E5F" & _
"89EC5DC210008B7DF48B45E0C1E00201C78B75F401C601C6E819000000C38B7DF48B45E0C1E00201C78B75F401" & _
"C601C6E8C2000000C38B45F889C1894DCC518B45FC89C1894DD0DB45D0D945D8DEE9D945BCDEC9D945D8DEC1DB" & _
"5DA88B45A83D010000007C053B45FC7E1D57E88B0200008B45C888078B45C48847018B45C08847025FE95F0000" & _
"00DB45CCD945D4DEE9D945BCDEC9D945D4DEC1DB5DA48B45A43D010000007C053B45F87E1D57E84A0200008B45" & _
"C888078B45C48847018B45C08847025FE91E0000005756E817020000E8270200008A0688078A46018847018A46" & _
"028847025E5F490F8556FFFFFF59490F8545FFFFFFC38B45F889C1894DCC518B45FC89C1894DD0DB45D0D945D8" & _
"DEE9D945BCDEC9D945D8DEC1D95DA0DB45CCD945D4DEE9D945BCDEC9D945D4DEC1D95D9CD945A0D945B0DEE9DB" & _
"5DA8D9459CD945B0DEE9DB5DA48B45A83D010000007C193B45FC7D148B45A43D010000007C0A3B45F87D05E91D" & _
"00000057E88B0100008B45C888078B45C48847018B45C08847025FE914010000D945A0DB45A8DEE9D95D98D945" & _
"9CDB45A4DEE9D95D9456E8430100008B5DFCC1E3020FB606894590DB45900FB64604894590DB4590D8E1D94598" & _
"DEC9DEC10FB6041E894590DB45900FB6441E04894590DB4590D8E1D94598DEC9DEC1D8E1D94594DEC9DEC1DB5D" & _
"90460FB60689458CDB458C0FB6460489458CDB458CD8E1D94598DEC9DEC10FB6041E89458CDB458C0FB6441E04" & _
"89458CDB458CD8E1D94598DEC9DEC1D8E1D94594DEC9DEC1DB5D8C460FB606894588DB45880FB64604894588DB" & _
"4588D8E1D94598DEC9DEC10FB6041E894588DB45880FB6441E04894588DB4588D8E1D94598DEC9DEC1D8E1D945" & _
"94DEC9DEC1DB5D885EE82800000057E8720000008B459088078B458C8847018B45888847025F490F8562FEFFFF" & _
"59490F8551FEFFFFC3B8FF0000003945907E0389459039458C7E0389458C3945887E03894588B8000000003945" & _
"907D0389459039458C7D0389458C3945887D03894588C38B45A4488B5DFCF7E38B5DA84B01D8C1E00201C6C38B" & _
"45CC488B5DFCF7E38B5DD04B01D8C1E00201C7C38B45A4488B5DFCF7E38B5DA84B01D8C1E00201C7C3"
End Sub
Private Sub I_ASM(s As String)
s = Replace$(s, " ", "")
Dim i As Long, aSize As Long
aSize = Len(s) \ 2
ReDim PicMagnifyMC(0 To aSize - 1)
For i = 0 To aSize - 1
PicMagnifyMC(i) = Val("&H" & Mid$(s, i * 2 + 1, 2))
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Erase PalBGR
Erase PicMagnifyMC
End Sub
Private Sub HSBMag_Change()
zMag = HSBMag.Value / 10
txtMag.Text = Str$(zMag)
End Sub
Private Sub SetPICScrollBars()
If PICW > PicFrameW Then
HorzSB.Enabled = True
HorzSB.Min = 0
HorzSB.Max = PICW - PicFrameW
HorzSB.LargeChange = PICW / 10
HorzSB.Value = 0
Else
HorzSB.Enabled = False
End If
If PICH > PicFrameH Then
VertSB.Enabled = True
VertSB.Min = 0
VertSB.Max = PICH - PicFrameH
VertSB.LargeChange = PICH / 10
VertSB.Value = 0
Else
VertSB.Enabled = False
End If
End Sub
Private Sub INIT_PIC()
' Fix locations
PicFrameW = 513
PicFrameH = 433
With Frame1
.Top = 0
.Left = 0
.Width = PicFrameW
.Height = PicFrameH
End With
With PIC
.Cls
.Top = 0
.Left = 0
.Width = (PicFrameW) * 15
.Height = (PicFrameH) * 15
End With
End Sub
Private Sub VertSB_Change()
PIC.Top = -VertSB.Value * 15
PIC.Refresh
End Sub
Private Sub HorzSB_Change()
PIC.Left = -HorzSB.Value * 15
PIC.Refresh
End Sub