ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 559|回复: 11

[求助] 像素画图之变形记

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-8 10:57 | 显示全部楼层 |阅读模式


微信截图_20240608104241.png
详见附件:
像素画图之变形记.rar (228.63 KB, 下载次数: 30)

TA的精华主题

TA的得分主题

发表于 2024-6-8 13:16 | 显示全部楼层
首先,生成曲线可简单,但不知道是否为你需要的效果:
  1. Sub DrawSineWave()
  2.     Dim i As Integer, j As Integer, arr(0 To 200, 1 To 2) As Single
  3.     Dim ws As Worksheet
  4.     Set ws = ActiveSheet
  5.     Dim left As Double: left = 400
  6.     Dim top As Double: top = 100
  7.     Dim width As Double: width = 200
  8.     Dim height As Double: height = 200
  9.     ' 画正弦曲线
  10.     For i = 0 To width
  11.         arr(i, 1) = left + i * 4
  12.         arr(i, 2) = top + height / 2 + Sin(i / 10) * height / 2
  13.     Next i
  14.     ws.Shapes.AddPolyline safearrayofpoints:=arr
  15. End Sub
复制代码


其次,shape没有点这个概念,如果要用极小的封闭图形(比如1~2像素大小的矩形、圆形)来模拟点,按曲线的偏移定位,是可以办到的。
直接画像素点可能需要API,并且绘制的图形可能无法直接作为对象来使用,这个我不懂。

TA的精华主题

TA的得分主题

发表于 2024-8-18 11:45 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-8-18 13:47 编辑

'图像变换,以下代码初步完成了变换

Sub DrawSineWave()
    Dim img As Object, v As Object, argbs Object
    Dim x&, y&, f$, w&, h&, x0&, y0&, k&
   
    f = "D:\1.jpg"
    Set img = CreateObject("Wia.ImageFile")
    Set v = CreateObject("Wia.Vector")
    img.LoadFile f '加载图片
    Set argbs = img.ARGBData

    w = img.width '宽度高度
    h = img.height
    r = h * 2.54 / 72: s = 3
    x0 = w / 2: y0 = h / 2 '中心
    p = WorksheetFunction.Pi
    t = WorksheetFunction.RoundUp(2 * p / w, 4)
    m = h + r * 2 '画布高度
   
   For i = 1 To m '创建画布
        For j = 1 To w
            v.Add &HFFFFFFFF
        Next
    Next

   ReDim arr(w - 1): k = 0
   For i = -p To p Step t '余弦
         arr(k) = i: k = k + 1
   Next
  
    k = 1 '左上角开始
    For i = 0 To h - 1
        For j = w - 1 To 0 Step -1
            x = r * arr(j) * s
            y = r * Sin(arr(j)) - (y0 - r -1)
           v((y0 + y + i -1) * w + x0 - x) = argbs(k)
            k = k + 1
        Next
    Next

    Set img = v.ImageFile(w, m)
    img.SaveFile "D:\m1.jpg" '保存
   Set argbs = Nothing '释放对象
   Set v = Nothing
   Set img = Nothing
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-18 12:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WIA这个库有这个功能,可以操作每个像素点的RGB数据,也可以利用RGB数据生成图像保存到文件中。
没明白你所谓的“波浪形点线像素图”是什么意思。是要生成的图片文件还是要在单元格里成像?波浪线嵌入在背景图片里?

TA的精华主题

TA的得分主题

发表于 2024-8-18 12:58 | 显示全部楼层
lss001 发表于 2024-8-18 11:45
'图像变换,以下代码初步完成了变换
'还差一步就是图像左右反转了
'也是留给大家讨论一下如何左右翻转图 ...

WIA ImageProcess FilterInfos 关于图像旋转翻转的滤镜参数设置:

RotateFlip
================================================
以 90 度增量旋转,以及水平或垂直翻转。

RotationAngle  - 如果希望旋转,可将 RotationAngle 属性设置为 90、180 或 270,
                 否则设置为 0 [默认值]
FlipHorizontal - 如果希望水平翻转图像,可将 FlipHorizontal 属性设置为 True,
                 否则设置为 False [默认值]
FlipVertical   - 如果希望垂直翻转图像,可将 FlipVertical 属性设置为 True,
                 否则设置为 False [默认值]
FrameIndex     - 如果希望修改除 ActiveFrame 之外的帧,
                 可将 FrameIndex 属性设置为帧的索引,
                 否则设置为 0 [默认值]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-18 14:43 | 显示全部楼层
是要生成像素图片
很多之前无解的贴子,总放不下,过一段时间又看看能否解决...
老师们的钻研精神让人佩服,本人还在若思 “高斯模糊、水彩特效、蜡笔特效呢”
有思路就有希望,查到一个贴子,但大多是其他语言的看不太懂,也不知怎样转VBA:
https://www.jb51.net/article/221395.htm

TA的精华主题

TA的得分主题

发表于 2024-8-18 15:11 来自手机 | 显示全部楼层
aman1516 发表于 2024-8-18 14:43
是要生成像素图片
很多之前无解的贴子,总放不下,过一段时间又看看能否解决...
老师们的钻研精神让人佩 ...

参考一下楼上更新代码,修正了图像反转问题!

TA的精华主题

TA的得分主题

发表于 2024-11-6 21:12 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2024-11-6 21:15 编辑
aman1516 发表于 2024-8-18 14:43
是要生成像素图片
很多之前无解的贴子,总放不下,过一段时间又看看能否解决...
老师们的钻研精神让人佩 ...

图像转换,请参考附件
Excelt.zip (49.57 KB, 下载次数: 12)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-11-7 12:37 | 显示全部楼层
可能是最终想要这种效果吧
米老鼠-彩色.gif

自绘图形样品.rar

308.08 KB, 下载次数: 16

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-7 23:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lss001 发表于 2024-11-6 21:12
图像转换,请参考附件

倾斜的方法不错,可以用图片拼成立方体了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 20:21 , Processed in 0.049256 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表