簡體   English   中英

如何將SurfaceTexture保存為位圖

[英]How to save SurfaceTexture as bitmap

當我將視頻解碼到表面時,我想將想要的幀另存為位圖/ jpeg文件。 我不想在屏幕上繪制,只想將SurfaceTexture的內容另存為圖像文件。

您必須渲染紋理。

如果它是正常紋理,並且您使用的是GLES 2或更高版本,則可以將其附加到FBO並直接從中讀取。 SurfaceTexture由“ 外部紋理 ”支持,並且可能采用的格式是GL驅動程序不支持其上的全部操作,因此您不能這樣做。 您需要渲染它,並讀取結果。

FWIW,保存幀的方式可能會對性能產生重大影響。 一個完整的示例演示使用MediaExtractorMediaCodecglReadPixels()和PNG文件的創建是到現在為止在bigflake( ExtractMpegFramesTest )。

我最近在Android平台上一直在研究這個問題。 總結各種選項以及它們為什么不適用。

  1. glReadPixels()當前唯一擁有Android Java編碼器的選項。 說慢。 從幀緩沖區讀取,而不是從紋理讀取(因此,必須首先將紋理渲染到內部幀緩沖區,除非一個人想要記錄屏幕本身)。 好的。 有事情要工作。

  2. EGL_KHR_image_base()一個擴展,似乎在本機(NJK)級別上可用,但在Java中不可用。

  3. glGetTexImage()看起來很有希望,但在OpenGL 2.0 ES變體中不可用。

  4. 像素緩沖區對象可能是“正確”的處理方式,但需要OpenGL 3.0 ES(即,選定的Android 4.3+設備)。

我並不是說這是在添加其他任何地方都無法獲得的信息。 但是有這么多看似相似的選項(那仍然行不通)令人困惑。 我不是OpenGL專家,因此很高興糾正上述任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM