|
楼主 |
发表于 2024-8-12 23:24
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
图片的模糊,算法原理就是将当前位置的像素与邻近像素颜色值进行平均。
这里提供一个像素模糊函数,输入参数为当前像素点的行、列坐标及完整图片像素RGB数据数组,返回值为此坐标像素点模糊后的颜色RGB值。
- Rem 此函数输入参数为当前像素的行数、列数(即坐标)以及完整的图像arrRGB数组,
- Rem 以(R,G,B)数组形式返回当前像素与邻近像素各颜色分量的均值。
- Function blurPixel(r As Integer, c As Integer, ByRef arrRGB) As Variant
- '定义8个方位的行列坐标变量
- Dim r_E As Byte, c_E As Byte '东
- Dim r_ES As Byte, c_ES As Byte '东南
- Dim r_S As Byte, c_S As Byte '南
- Dim r_WS As Byte, c_WS As Byte '西南
- Dim r_W As Byte, c_W As Byte '西
- Dim r_WN As Byte, c_WN As Byte '西北
- Dim r_N As Byte, c_N As Byte '北
- Dim r_EN As Byte, c_EN As Byte '东北
-
- Dim width As Integer, height As Integer
- width = UBound(arrRGB, 2)
- height = UBound(arrRGB, 1)
-
- Dim avgR As Byte, avgG As Byte, avgB As Byte 'R,G,B各色的均值
- '各个方位坐标处理
- '东
- r_E = r
- c_E = c + 1: If c_E > width Then c_E = width
- '东南
- r_ES = r + 1: If r_ES > height Then r_ES = height
- c_ES = c + 1: If c_ES > width Then c_ES = width
- '南
- r_S = r + 1: If r_S > height Then r_S = height
- c_S = c
- '西南
- r_WS = r + 1: If r_WS > height Then r_WS = height
- c_WS = c - 1: If c_WS = 0 Then c_WS = 1
- '西
- r_W = r
- c_W = c - 1: If c_W = 0 Then c_W = 1
- '西北
- r_WN = r - 1: If r_WN = 0 Then r_WN = 1
- c_WN = c - 1: If c_WN = 0 Then c_WN = 1
- '北
- r_N = r - 1: If r_N = 0 Then r_N = 1
- c_N = c
- '东北
- r_EN = r - 1: If r_EN = 0 Then r_EN = 1
- c_EN = c + 1: If c_EN > width Then c_EN = width
-
- '计算均值
- avgR = WorksheetFunction.Average _
- (arrRGB(r_E, c_E)(0), arrRGB(r_ES, c_ES)(0), _
- arrRGB(r_S, c_S)(0), arrRGB(r_WS, c_WS)(0), _
- arrRGB(r_W, c_W)(0), arrRGB(r_WN, c_WN)(0), _
- arrRGB(r_N, c_N)(0), arrRGB(r_EN, c_EN)(0), _
- arrRGB(r, c)(0))
- avgG = WorksheetFunction.Average _
- (arrRGB(r_E, c_E)(1), arrRGB(r_ES, c_ES)(1), _
- arrRGB(r_S, c_S)(1), arrRGB(r_WS, c_WS)(1), _
- arrRGB(r_W, c_W)(1), arrRGB(r_WN, c_WN)(1), _
- arrRGB(r_N, c_N)(1), arrRGB(r_EN, c_EN)(1), _
- arrRGB(r, c)(1))
- avgB = WorksheetFunction.Average _
- (arrRGB(r_E, c_E)(2), arrRGB(r_ES, c_ES)(2), _
- arrRGB(r_S, c_S)(2), arrRGB(r_WS, c_WS)(2), _
- arrRGB(r_W, c_W)(2), arrRGB(r_WN, c_WN)(2), _
- arrRGB(r_N, c_N)(2), arrRGB(r_EN, c_EN)(2), _
- arrRGB(r, c)(2))
-
- blurPixel = Array(avgR, avgG, avgB)
- End Function
复制代码 |
|