|
|

楼主 |
发表于 2025-4-12 10:02
|
显示全部楼层
直线影射为一个圆,卷轴:
算法套入模板:
- Sub ArcImg() '卷轴效果
- Dim Img, Img1 'As ImageFile
- Dim IP 'As ImageProcess
- Dim v, v1 'As Vector
- Dim f, f1, w As Long, h As Long, w1 As Long, w2 As Long, h1 As Long, h2 As Long, Z, ps As Integer
- Dim i As Long, j As Long, k As Long, k1 As Long, ii As Long, jj As Long, R As Long
- Const pi = 3.1415926
- ''1弧度=57.3度, 1度=0.0174533弧度
- 'On Error Resume Next
- Set Img = CreateObject("WIA.ImageFile")
- Set Img1 = CreateObject("WIA.ImageFile")
- Set IP = CreateObject("WIA.ImageProcess")
- f1 = ThisWorkbook.Path & "\dt.bmp"
- Img1.LoadFile f1
- w1 = Img1.width
- h1 = Img1.height
- Set v1 = Img1.ARGBData
- w = w1
- R = w1 / (2 * pi)
- h = h1 + R * (1 - Cos(w1 / (2 * R)))
- Set v = CreateObject("WIA.Vector")
- For Z = 1 To w * h
- v.Add &HFFFFFFFF
- Next
- For i = 1 To h1
- For j = 1 To w1
- k1 = (i - 1) * w1 + j
- If j < w1 / 2 Then
- jj = w1 / 2 - R * Sin((w1 / 2 - j) / R)
- ii = R - R * Cos((w1 / 2 - j) / R) + i
- Else
- jj = w1 / 2 + R * Sin((j - w1 / 2) / R)
- ii = R - R * Cos((j - w1 / 2) / R) + i
- End If
- k = (ii - 1) * w1 + jj
- v(k) = v1(k1)
- Next
- Next
- Set Img = v.ImageFile(w, h)
- f = ThisWorkbook.Path & "\Arcpy.jpg"
- If Dir(f) <> "" Then Kill f
- Img.SaveFile f
- MsgBox "ok!"
- End Sub
复制代码
|
|