【问题标题】:What is the difference in rsUnpackColor8888() from float4 convert_float4(char4 v) - Android/RenderscriptrsUnpackColor8888() 与 float4 convert_float4(char4 v) 有什么区别 - Android/Renderscript
【发布时间】:2017-07-17 18:43:10
【问题描述】:

我在这个网站上看到了 RenderScript 示例,这里是一个示例:

https://android.googlesource.com/platform/frameworks/rs/+/master/java/tests/ImageProcessing2/src/com/android/rs/image/greyscale.rs?autodive=0%2F

现在他们使用rsUnpackColor8888char 解包到一个包含4 个浮点数的数组中。 为什么不从这里使用convert_float4(char4 v); https://developer.android.com/guide/topics/renderscript/reference/rs_convert.html

有什么区别?

第一个说:“将 uchar4 颜色解包到 float4。生成的浮点数将介于 0.0 和 1.0 之间。”。那么第二个对吗?

【问题讨论】:

  • 我很确定 convert_float4 只是 float result = (float) charvalue 每个元素并且不将其限制为 [0, 1] 而是 [0, 255] .
  • @harism 为什么有人会调用 convert_float4(on a uchar4) ?您仍然可以在 uchar 上使用数学符号,例如加法等,对吗?它仍然取值 0-255
  • 如果有人需要更高的精度怎么办?

标签: android renderscript


【解决方案1】:

rsUnpackColor8888() 将颜色分量值标准化为 [0, 1] 范围。 convert_float4() 没有这样的事情,所以你会得到 [0, 255] 范围内的浮点数。当反过来转换时,convert_uchar4() 向下舍入并将输出钳制为 [0, 255](即它正确处理值 255)。

【讨论】:

  • 为什么它仍然处于浮动状态?使用 int 不是更好更容易吗?以及如何使用浮动?
  • 你是在问为什么原来的例子使用了浮点数?
  • 这是一个比较笼统的问题,但如果你想用例子来解释它,它也很好。 :)
  • 实际上使用浮点数更容易,因为示例中的乘法因子是分数。人们自然可以用整数来实现它,但它需要更多的操作并且不太清楚。至于相对性能,请参阅此处的讨论:stackoverflow.com/questions/32015660/…
  • 为什么花车更容易?以这种方式阅读它不是更容易(并转换为十六进制颜色值)吗?并且还让 CPU/GPU 处理整数而不是浮点数(因为浮点数更复杂)?该链接实际上说浮动在性能上更差。另外,您将如何使用整数?我现在正在学习RS,所以对它了解不多。
猜你喜欢
  • 2019-04-18
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多