在 iOS / iPad 上编写绘画应用程序的最佳方法
Posted
技术标签:
【中文标题】在 iOS / iPad 上编写绘画应用程序的最佳方法【英文标题】:Best approach for coding a painting app on iOS / iPad 【发布时间】:2020-06-11 22:39:42 【问题描述】:我正在尝试为 iPad 构建一个绘图/绘画应用程序,带有纹理笔尖和纸。
到目前为止,我遇到的所有绘图应用程序示例代码似乎都可以通过抚摸路径来工作。但是,我想在整个路径上实际应用纹理,以模拟油刷或木炭。
这里是画笔笔尖纹理的示例:Bursh tip
使用相同笔尖绘画时的结果:Result
在结果中,顶部的输出是当“画笔笔尖”纹理沿路径远距离应用时的样子。
底部的结果是沿着路径以非常小的步长应用的纹理。那些在 Photoshop 中使用过自定义画笔的人会觉得这很熟悉。
几年前我曾在 Processing 中对此进行过原型制作(后来我丢失了源代码),并让它实时工作。
在处理中,我将画笔笔尖 PNG 和画布(或我正在绘制的图像)都转换为整数数组。然后,我只是将画笔笔尖中的值复制到画布纹理的适当索引处。在循环结束时,我显示了该时间步长的图像。在鼠标返回的每个点之间重复此操作数十次。
我将如何在 ios 中实时处理这个问题?我试过这个(https://blog.avenuecode.com/how-to-use-uikit-for-low-level-image-processing-in-swift),但它太慢了。
这让我相信 Metal 可能是唯一的出路。这是真的吗,还是不必要地使事情复杂化了?
感谢您的指导!
PS。我在 Xcode 11.5 中使用面向 iOS 13 的 Swift 5 进行编码。
【问题讨论】:
速度太慢了,您是在进行调试构建还是发布构建?在设备或模拟器上?我建议仅在物理设备上对性能进行优化后得出结论... 虽然 Metal 是一种终极方式,它提供了最大的灵活性和性能潜力,但它的使用也是最具挑战性的。妥协可能是 CoreGraphics API (developer.apple.com/documentation/coregraphics)。实现上述示例应该相当容易,并且我希望性能会比手动操作 CPU 上的像素好得多(如您提到的示例中所述)。 @Rob,谢谢你的建议。由于在此之前我只在处理方面工作过,因此我不知道模拟器可能会导致性能下降,即使它运行在功能更强大的机器上也是如此。将在设备上进行检查。 @Idoogy,也谢谢你。刚开始在 iOS 和 Xcode 中编码,并且会消化 CoreGraphic 文档,然后再去尝试像 Metal 这样更具挑战性的东西。 FWIW,并不是说设备一定比运行模拟器的计算机快,而只是不同(对于纯计算,模拟器可能更快,但对于图形的东西,专用的 iOS 设备硬件可以有时更快)。不过,更大的因素是选择进行优化的发布版本而不是优化的调试版本。 【参考方案1】:欢迎!
我建议您查看 Core Image。它是 Apple 的图像处理框架(比 Metal 更高级别,尽管它可以与 Metal 集成)。不幸的是,文档有点过时了,但我相信你可以将它翻译成 Swift。
HereApple 介绍了如何使用 Core Image 实现绘画应用程序,here 可以下载相应的示例项目。
【讨论】:
谢谢你,弗兰克!那个 MicroPainting 例子正是我要找的,只需要为 Swift 翻译它。干杯。以上是关于在 iOS / iPad 上编写绘画应用程序的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
想通过 Quartz 在 ipad 绘画应用程序中添加手动擦除选项
iOS 设备的最佳声音格式? (iPhone & iPad)