gpt4 book ai didi

android - 截取 SurfaceView 的屏幕截图

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:02 28 4
gpt4 key购买 nike

我正在开发一个简单的相机应用程序。我有截取整个 Activity 的屏幕截图并将其写入 SD 卡的代码。问题是 Surfaceview 返回黑屏。

我想知道如何独立截取surfaceview的截图。这是获取整个 Activity 屏幕截图的代码。

    findViewById(R.id.screen).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout1);
layout.setVisibility(RelativeLayout.GONE);
Bitmap bitmap = takeScreenshot();
Toast.makeText(getApplicationContext(),"Please Wait", Toast.LENGTH_LONG).show();
saveBitmap(bitmap);
}
});

}



public Bitmap takeScreenshot() {
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}


public void saveBitmap(Bitmap bitmap) {
final MediaPlayer cheer = MediaPlayer.create(PicShot.this, R.raw.shutter);
cheer.start();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".png";
final RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout1);
File imagePath = new File(Environment.getExternalStorageDirectory() + "/" + fname);
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
layout.setVisibility(RelativeLayout.VISIBLE);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
Uri uri = Uri.fromFile(imagePath);
share.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(Intent.createChooser(share, "Share Image"));
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}

最佳答案

SurfaceView 的表面独立于绘制 View 元素的表面。因此捕获 View 内容不会包括 SurfaceView。

您需要单独捕获 SurfaceView 内容并执行您自己的合成步骤。进行捕获的最简单方法可能是重新渲染内容,但使用屏幕外位图作为目标而不是表面。如果您使用 GLES 渲染到屏幕外 pbuffer,则可以在交换缓冲区之前使用 glReadPixels()

更新: Grafika's “来自相机的纹理” Activity 演示了如何使用 OpenGL ES 处理来自相机的实时视频。 EglSurfaceBase#saveFrame() 展示了如何将 GLES 渲染捕获到位图。

更新:另见 this answer ,它提供了更多背景知识。

关于android - 截取 SurfaceView 的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com