绘制由 vImage 计算的直方图
Posted
技术标签:
【中文标题】绘制由 vImage 计算的直方图【英文标题】:Draw Histogram computed by vImage 【发布时间】:2018-02-05 18:13:02 【问题描述】:我使用 vImageHistogramCalculation_ARGB8888(...) 计算了直方图。我现在将三个 RGB 通道中的每一个的直方图数据存储在 256 个 bin 中。我的问题是使用 OpenGLES 或核心图形在 UIView 中绘制这些值的方法是什么?它需要实时完成(至少每秒 30 帧)。
【问题讨论】:
此代码来自 2016 可能帮助:flexmonkey.blogspot.co.uk/2016/05/a-histogram-display-component-in-swift.html 我看到了那个代码,但问题是它单独绘制了三层RGB直方图,没有混合。重叠图层的颜色混合绘制的方法是什么? 【参考方案1】:你也可以。在每秒 30 帧的情况下,这两种方法都不可能成为问题。
Core Graphics 更简单,所以我会从创建 UIView 的自定义子类开始并覆盖 draw(_:)
方法。
在该方法中,您可以使用 UIBezierPath 或 CGPath 绘制一系列矩形来表示直方图的条形。
试一试,如果遇到困难,请报告。
【讨论】:
如果我使用 UIBezierPath 或 CGPath,如何混合三个 RGB 层的颜色? 您必须为输出中的每个彩色条带创建单独的路径。 我使用了 UIBezierPath,它可以工作,但不能满足我的需要。我不是在尝试 OpenGLES。问题是将 256x1 直方图数据重复传递给着色器的最佳方法是什么? 您现在正在尝试使用 OpenGLES? 是的,因为我想合并重叠的颜色。我不知道如何使用 draw(_:)以上是关于绘制由 vImage 计算的直方图的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 中使用 vImageHistogramCalculation 计算图像的直方图