问题标签 [android-graphics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 如何使用 OpenGL ES 着色器转换 rgbaToYuv 然后渲染到 ImageReader 的表面
我想用 openGl 填充 ImageReader。
我的着色器可以转换rgbaToyuv
.
所以这是我的代码:
但我得到以下错误:
它说imgReaderFmt != bufferFormat
。
但是我该怎么做才能使它与YUV_420_888
格式一起使用。
android - 确定路径 - 来自 android.graphics.Path - 是否是一条直线?
如何确定 android.graphics.Path 是否是一条没有斜角或锐角的直线?
android - 从一个表面复制到另一个表面
我目前有两个不同的表面(一个来自 SurfaceView,另一个表面从 MediaCodec 创建)。
从一个表面复制到另一个表面有哪些不同的方法?
android - 将 SurfaceView 的内容绘制到另一个表面
我目前正在尝试通过传递目标表面的画布将一个 SurfaceView 的内容绘制到另一个表面。
但不幸的是,它出现了黑屏。无论如何要调试它?有没有其他方法可以实现这一目标?
android - 在 Surface、SurfaceControl、WindowManager 和 OpenGL 的上下文中,布局如何在 Android 中呈现在屏幕上?
我正在学习并试图了解 Android 图形架构的较低级别部分,特别是在创建布局时,Android 如何将图形数据放入缓冲区以及数据如何正确显示在屏幕上的 Surfaces/Windows 上。但是,尽管查看了来自https://source.android.com/devices/graphics的一些 Android 文档,但我还是很难理解这一切是如何工作的。
熟悉这个较低级别过程的人能否解释或提供一些资源或参考,以更好地理解 Surfaces、SurfaceControl、WindowManager 和 OpenGL 如何协同工作以在 Android 屏幕上显示布局?
android - 如何在 Android 上使用 Jetpack Compose 从屏幕触摸事件(大规模)中进行绘制
使用 Jetpack Compose 在屏幕上绘画时使用屏幕触摸事件(或 MotionEvents)只有几个指南。我找到的所有指南都涉及:
- 将触摸事件链接到 Jetpack Compose
State
,以便在每个新的触摸动作上触发重新组合(有点像invalidate()
在旧的基于视图的 Android 方法中调用); - 将该事件更改保存到记住的列表中;
- 然后在每次重组时重新绘制整个列表。
我找到的最好的指南是:Code Simple Android Jetpack Compose Drawing App ,这里有完整的代码。
只有几百个触摸事件,该算法的响应速度惊人。但是当列表中有数千个事件时,它开始变得有点像Schlemiel the Painter's Algorithm,并且变得越来越慢,直到它最终停止工作。
在旧的 Kotlin/Android 中,解决方法通常是绘制到由 bitmap 支持的 Canvas,因此您不需要在每个invalidate()
. 但是我在 Jetpack Compose 中找不到无缝保存到位图的画布。
Jetpack Compose 中是否有一种方法可以简化remember
Composable Canvas 的内容,因此不需要在每次重新组合时重新绘制整个 Canvas?
如果做不到这一点,有没有办法用位图支持 Jetpack Compose Canvas,就像在旧的 Canvas 中一样?
据我所知,Jetpack Compose Painter()对象是我们应该使用的对象,但我终生无法弄清楚如何去做。
在 Painter() 对象中,我不知道如何访问一个drawScope
在其中发出动态 Compose 命令的方法,例如drawLine
和drawCircle
。我能找到的只是你可以覆盖的地方drawScope.onDraw()
,但我不知道如何将它用于我想要的。
任何指向我正确方向的帮助都会很棒!
android - 在 Android 中使用 Path 绘制自定义形状
除此之外,我希望 RGB 边框的属性是可配置的,例如。应该能够根据需要更改笔划宽度。但是,我面临几个问题:
- 倒三角的底边无法去除(RGB 边框线底部不应该是直的)
- 如果我尝试更改 RGB 线的宽度(使用 paint.setStrokeWidth()),它会在它们之间引入不希望的间隙,而我希望它们是连续的。我确定我犯了一些计算错误,但无法弄清楚。
- 我已经体验过使用 lineTo on Path 沿视图边缘绘制一条线是用 Paint 上设置的笔划宽度的一半绘制的。但是,我无法找到相同的任何阅读材料。有人可以启发我吗?
自定义视图的 onDraw 方法如下:
另外,视图类的onMeasure如下:
android - OpenGL 错误:GL_INVALID_FRAMEBUFFER_OPERATION 在 glBindFramebuffer(GL_FRAMEBUFFER,0)
我正在用 C++ 编写 OpenGL,并通过 JNI 从 Android 调用它。我的代码因此错误而崩溃:
OpenGL 错误:GL_INVALID_FRAMEBUFFER_OPERATION 在 glBindFramebuffer(GL_FRAMEBUFFER,0)
它只发生大约五分之一。根据文件,这绝不应该发生。的文件glBindFramebuffer
说:
如果 framebuffer 不为零或先前从调用 glGenFramebuffers 返回的帧缓冲区的名称,则生成 GL_INVALID_OPERATION。
就我而言,framebuffer
它始终为 0,因此它应该始终有效,但不知何故它没有。我确实注意到我正在编写的代码使用 ES2。ES2 文档页面没有说明让我感到困惑的错误GL_INVALID_FRAMEBUFFER_OPERATION
。这是我的 C++ 文件中与 OpenGL 相关的包含:
对于它的价值,我想做的是将相机帧渲染为 a FBO
,然后再次将其渲染为Surface
UI 提供的 a 。在将其复制到 UI 之前Surface
,我需要取消绑定FBO
,这就是崩溃发生的时候。