问题标签 [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.

0 投票
1 回答
52 浏览

android - 如何使用 OpenGL ES 着色器转换 rgbaToYuv 然后渲染到 ImageReader 的表面

我想用 openGl 填充 ImageReader。

我的着色器可以转换rgbaToyuv.

所以这是我的代码:

但我得到以下错误:

来自 https://cs.android.com/android/platform/superproject/+/master:frameworks/base/media/jni/android_media_ImageReader.cpp;l=590

它说imgReaderFmt != bufferFormat

但是我该怎么做才能使它与YUV_420_888格式一起使用。

0 投票
0 回答
19 浏览

android - 确定路径 - 来自 android.graphics.Path - 是否是一条直线?

如何确定 android.graphics.Path 是否是一条没有斜角或锐角的直线?

0 投票
1 回答
68 浏览

graphics - 如何获得偏移量在 Y 轴上的旋转角度

我正在尝试获取在 Y 轴上旋转的偏移的旋转角度。说当偏移量(400, 0, 0)在 Y 轴上旋转时,我需要找到正确的角度,以便新的偏移量 x 与预先知道的 x 轴值相交(在我的情况下是 350) 在此处输入图像描述

0 投票
1 回答
171 浏览

android - 从一个表面复制到另一个表面

我目前有两个不同的表面(一个来自 SurfaceView,另一个表面从 MediaCodec 创建)。

从一个表面复制到另一个表面有哪些不同的方法?

0 投票
0 回答
18 浏览

android - 将 SurfaceView 的内容绘制到另一个表面

我目前正在尝试通过传递目标表面的画布将一个 SurfaceView 的内容绘制到另一个表面。

但不幸的是,它出现了黑屏。无论如何要调试它?有没有其他方法可以实现这一目标?

0 投票
0 回答
26 浏览

android - 在 Surface、SurfaceControl、WindowManager 和 OpenGL 的上下文中,布局如何在 Android 中呈现在屏幕上?

我正在学习并试图了解 Android 图形架构的较低级别部分,特别是在创建布局时,Android 如何将图形数据放入缓冲区以及数据如何正确显示在屏幕上的 Surfaces/Windows 上。但是,尽管查看了来自https://source.android.com/devices/graphics的一些 Android 文档,但我还是很难理解这一切是如何工作的。

熟悉这个较低级别过程的人能否解释或提供一些资源或参考,以更好地理解 Surfaces、SurfaceControl、WindowManager 和 OpenGL 如何协同工作以在 Android 屏幕上显示布局?

0 投票
0 回答
223 浏览

android - 如何在 Android 上使用 Jetpack Compose 从屏幕触摸事件(大规模)中进行绘制

使用 Jetpack Compose 在屏幕上绘画时使用屏幕触摸事件(或 MotionEvents)只有几个指南。我找到的所有指南都涉及:

  1. 将触摸事件链接到 Jetpack Compose State,以便在每个新的触摸动作上触发重新组合(有点像invalidate()在旧的基于视图的 Android 方法中调用);
  2. 将该事件更改保存到记住的列表中;
  3. 然后在每次重组时重新绘制整个列表。

我找到的最好的指南是:Code Simple Android Jetpack Compose Drawing App ,这里有完整的代码。

只有几百个触摸事件,该算法的响应速度惊人。但是当列表中有数千个事件时,它开始变得有点像Schlemiel the Painter's Algorithm,并且变得越来越慢,直到它最终停止工作。

在旧的 Kotlin/Android 中,解决方法通常是绘制到由 bitmap 支持的 Canvas,因此您不需要在每个invalidate(). 但是我在 Jetpack Compose 中找不到无缝保存到位图的画布。

Jetpack Compose 中是否有一种方法可以简化rememberComposable Canvas 的内容,因此不需要在每次重新组合时重新绘制整个 Canvas?

如果做不到这一点,有没有办法用位图支持 Jetpack Compose Canvas,就像在旧的 Canvas 中一样?

据我所知,Jetpack Compose Painter()对象是我们应该使用的对象,但我终生无法弄清楚如何去做。

在 Painter() 对象中,我不知道如何访问一个drawScope在其中发出动态 Compose 命令的方法,例如drawLinedrawCircle。我能找到的只是你可以覆盖的地方drawScope.onDraw(),但我不知道如何将它用于我想要的。

任何指向我正确方向的帮助都会很棒!

0 投票
1 回答
55 浏览

android - 在 Android 中使用 Path 绘制自定义形状

我正在尝试在目前看起来像这样的画布上绘制自定义形状: 在此处输入图像描述

这就是我想要实现的目标: 在此处输入图像描述

除此之外,我希望 RGB 边框的属性是可配置的,例如。应该能够根据需要更改笔划宽度。但是,我面临几个问题:

  1. 倒三角的底边无法去除(RGB 边框线底部不应该是直的)
  2. 如果我尝试更改 RGB 线的宽度(使用 paint.setStrokeWidth()),它会在它们之间引入不希望的间隙,而我希望它们是连续的。我确定我犯了一些计算错误,但无法弄清楚。
  3. 我已经体验过使用 lineTo on Path 沿视图边缘绘制一条线是用 Paint 上设置的笔划宽度的一半绘制的。但是,我无法找到相同的任何阅读材料。有人可以启发我吗?

自定义视图的 onDraw 方法如下:

另外,视图类的onMeasure如下:

0 投票
0 回答
32 浏览

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,然后再次将其渲染为SurfaceUI 提供的 a 。在将其复制到 UI 之前Surface,我需要取消绑定FBO,这就是崩溃发生的时候。

0 投票
1 回答
26 浏览

java - 使用 Android 图形在 Paint 中绘制图形

我正在尝试使用画布在视图上绘制图表。到目前为止,它绘制正确,如下图所示:

期望的输出

一旦你点击屏幕,预期的结果应该会清除屏幕并绘制一个新的图表,而是在它上面绘制,结果如下:

实际输出

如何正确清除屏幕?

我努力了

从其他问题中看到,但它不起作用。