SurfaceTexture 类

定义

将图像流中的帧捕获为 OpenGL ES 纹理。

[Android.Runtime.Register("android/graphics/SurfaceTexture", DoNotGenerateAcw=true)]
public class SurfaceTexture : Java.Lang.Object
[<Android.Runtime.Register("android/graphics/SurfaceTexture", DoNotGenerateAcw=true)>]
type SurfaceTexture = class
    inherit Object
继承
SurfaceTexture
属性

注解

将图像流中的帧捕获为 OpenGL ES 纹理。

图像流可能来自相机预览或视频解码。 android.view.Surface从 SurfaceTexture 创建的,可用作 API 和 android.renderscript.Allocation API 的android.hardware.camera2android.media.MediaCodecandroid.media.MediaPlayer输出目标。 调用时 #updateTexImage ,将更新在创建 SurfaceTexture 时指定的纹理对象的内容,以包含图像流中的最新图像。 这可能会导致跳过流的某些帧。

指定较旧 android.hardware.Camera API 的输出目标时,还可以使用 SurfaceTexture 代替 SurfaceHolder。 这样做将导致图像流中的所有帧都发送到 SurfaceTexture 对象,而不是发送到设备的显示器。

从纹理采样时,应首先使用通过查询 #getTransformMatrix(float[])的矩阵来转换纹理坐标。 每次调用转换矩阵时都可能会更改 #updateTexImage ,因此每次更新纹理图像时都应重新查询该矩阵。 此矩阵将传统的 2D OpenGL ES 纹理坐标列向量(s、t、0、1)转换为流式处理纹理中的适当采样位置(其中 s、t、0、1) 和 t 处于非独占间隔 [0, 1]。 此转换可补偿图像流源的任何属性,这些属性会导致它与传统的 OpenGL ES 纹理不同。 例如,可以通过使用查询矩阵转换列向量(0、0、0、1)来实现图像左下角的采样,而图像右上角的采样可以通过转换(1、1、0、1)来完成。

纹理对象使用由 GL_OES_EGL_image_external OpenGL ES 扩展定义的 GL_TEXTURE_EXTERNAL_OES 纹理目标。 这会限制如何使用纹理。 每次绑定纹理时,它都必须绑定到GL_TEXTURE_EXTERNAL_OES目标,而不是GL_TEXTURE_2D目标。 此外,从纹理采样的任何 OpenGL ES 2.0 着色器都必须声明其使用此扩展的使用,例如,“#extension GL_OES_EGL_image_external: require”指令。 此类着色器还必须使用 samplerExternalOES GLSL 采样器类型访问纹理。

可以在任何线程上创建 SurfaceTexture 对象。 #updateTexImage 只能在包含纹理对象的 OpenGL ES 上下文的线程上调用。 在任意线程上调用帧可用的回调,因此,除非不应直接从回调中调用特殊小心 #updateTexImage

适用于 . 的 android.graphics.SurfaceTextureJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

SurfaceTexture(Boolean)

构造新的 SurfaceTexture 以将图像流式传输到给定的 OpenGL 纹理。

SurfaceTexture(Int32)

构造新的 SurfaceTexture 以将图像流式传输到给定的 OpenGL 纹理。

SurfaceTexture(Int32, Boolean)

构造新的 SurfaceTexture 以将图像流式传输到给定的 OpenGL 纹理。

SurfaceTexture(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
DataSpace

检索与纹理图像关联的数据空间。

Handle

基础 Android 实例的句柄。

(继承自 Object)
IsReleased

返回 true 是否已释放 SurfaceTexture。

JniIdentityHashCode

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
JniPeerMembers

将图像流中的帧捕获为 OpenGL ES 纹理。

PeerReference

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

Timestamp

检索与最近调用 #updateTexImage所设置的纹理图像关联的时间戳。

方法

AttachToGLContext(Int32)

将 SurfaceTexture 附加到调用线程上的当前 OpenGL ES 上下文。

Clone()

创建并返回此对象的副本。

(继承自 Object)
DetachFromGLContext()

从拥有 OpenGL ES 纹理对象的 OpenGL ES 上下文中分离 SurfaceTexture。

Dispose()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
Dispose(Boolean)

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
GetTransformMatrix(Single[])

检索与最近调用 #updateTexImage所设置的纹理图像关联的 4x4 纹理坐标转换矩阵。

JavaFinalize()

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Release()

release() 释放所有缓冲区,并将 SurfaceTexture 置于“已放弃”状态。

ReleaseTexImage()

释放纹理内容。

SetDefaultBufferSize(Int32, Int32)

设置图像缓冲区的默认大小。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
SetOnFrameAvailableListener(SurfaceTexture+IOnFrameAvailableListener)

注册在 SurfaceTexture 可用的新图像帧时要调用的回调。

SetOnFrameAvailableListener(SurfaceTexture+IOnFrameAvailableListener, Handler)

注册在 SurfaceTexture 可用的新图像帧时要调用的回调。

ToArray<T>()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
UpdateTexImage()

将纹理图像更新到图像流中的最新帧。

Wait()

使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<><

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)

事件

FrameAvailable

将图像流中的帧捕获为 OpenGL ES 纹理。

显式接口实现

IJavaPeerable.Disposed()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.Finalized()

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

将图像流中的帧捕获为 OpenGL ES 纹理。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

将图像流中的帧捕获为 OpenGL ES 纹理。

GetJniTypeName(IJavaPeerable)

将图像流中的帧捕获为 OpenGL ES 纹理。

适用于