相关疑难解决方法(0)

Android截图表面视图显示黑屏

我试图通过代码获取我的游戏截图并通过意图分享.我可以做这些事情,但屏幕截图总是显示为黑色.以下是与共享屏幕截图相关的代码:

View view = MainActivity.getView();
view.setDrawingCacheEnabled(true);
Bitmap screen = Bitmap.createBitmap(view.getDrawingCache(true));
.. save Bitmap
Run Code Online (Sandbox Code Playgroud)

这是在MainActivity中:

view = new GameView(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.FILL_PARENT,
            RelativeLayout.LayoutParams.FILL_PARENT));

public static SurfaceView getView() {
    return view;
}
Run Code Online (Sandbox Code Playgroud)

而观点本身:

public class GameView extends SurfaceView implements SurfaceHolder.Callback {
private static SurfaceHolder surfaceHolder;
...etc
Run Code Online (Sandbox Code Playgroud)

这就是我绘制一切的方式:

Canvas canvas = surfaceHolder.lockCanvas(null);
        if (canvas != null) {
                Game.draw(canvas);
...
Run Code Online (Sandbox Code Playgroud)

好的,根据一些答案,我构建了这个:

public static void share() {
    Bitmap screen = GameView.SavePixels(0, 0, Screen.width, Screen.height);
    Calendar c = Calendar.getInstance();
    Date d = c.getTime();
    String path = …
Run Code Online (Sandbox Code Playgroud)

android surfaceview

29
推荐指数
4
解决办法
3万
查看次数

捕获MediaProjection虚拟显示器输出到ImageReader的系统错误

我正在开发一个需要捕获屏幕到位图进行传输的应用程序.我正在尝试使用新的Android 5.0 android.media.projection API来进行屏幕捕获.

此API的工作流程最终会调用

mediaProjection.createVirtualDisplay("Test Screen", WIDTH, HEIGHT, DPI,
   DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);
Run Code Online (Sandbox Code Playgroud)

在我最初尝试捕获时,我从SurfaceView中获取了表面对象.这工作正常; 最终结果是在屏幕上绘制的显示器的微小副本(导致Droste效果)

我认为这个功能几近完成,但我发现 SurfaceViews(从代码的角度来看)是不可读的; 你不能从他们那里得到一个位图.

在寻找其他解决方案时,我遇到了这个与我的目标非常相似的问题,并且在该线程中建议使用ImageReader而不是SurfaceView来获取传递给createVirtualDisplay API调用的Surface.

但是,当我更改我的代码以使用ImageReader代替SurfaceView时,我得到运行时logcat错误(没有异常),并且永远不会调用ImageReader的回调函数.createVirtualDisplay调用还返回一个看似有效的VirtualDisplay对象.

这是logcat:

9230-9270/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: createGraphicBuffer failed
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? [unnamed-9230-0] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer? …
Run Code Online (Sandbox Code Playgroud)

java android android-bitmap android-5.0-lollipop nexus6

7
推荐指数
1
解决办法
3679
查看次数

我可以在Android Studio中的模拟器中测试屏幕记录吗?

我尝试从下面的链接测试关于屏幕记录的示例代码,我修改了一些代码以禁用录制音频.

http://www.truiton.com/2015/05/capture-record-android-screen-using-mediaprojection-apis/

我在Android Studio V1.3中测试代码,但是我收到以下错误,文件capture.mp4为空.

我不确定我是否必须在真正的手机上测试代码?你可以帮帮我吗 ?谢谢!

错误信息

09-22 06:41:50.250    2167-2167/? E/AndroidRuntime? FATAL EXCEPTION: main
    Process: screencapture.truiton.com.myapplication, PID: 2167
    java.lang.RuntimeException: stop failed.
            at android.media.MediaRecorder.stop(Native Method)
            at screencapture.truiton.com.myapplication.MainActivity.onToggleScreenShare(MainActivity.java:93)
            at screencapture.truiton.com.myapplication.MainActivity$1.onClick(MainActivity.java:55)
            at android.view.View.performClick(View.java:4780)
            at android.widget.CompoundButton.performClick(CompoundButton.java:120)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud)

源代码

package screencapture.truiton.com.myapplication;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";
    private static final int PERMISSION_CODE = 1;
    private int mScreenDensity;
    private MediaProjectionManager …
Run Code Online (Sandbox Code Playgroud)

android

7
推荐指数
1
解决办法
850
查看次数

在其中使用带有相机预览的SurfaceView的ScreenShot

我正在尝试实现一种功能,包括录制视频时拍摄照片.这就是我结束使用SurfaceView的截图方法的原因.
但是,当我尝试使用SurfaceView的屏幕截图时.我总是得到一张空白图片.

这是我用于拍摄快照的代码:

View tempView = (View)MY_SURFACE_VIEW;
tempView.setDrawingCacheEnabled(true);
Bitmap tempBmp = Bitmap.createBitmap(tempView.getDrawingCache());
tempView.setDrawingCacheEnabled(false);
//Saving this Bitmap to a File....
Run Code Online (Sandbox Code Playgroud)

如果您认为这是一个重复的问题,请允许我向您保证,在询问此问题之前,我已经尝试过针对相同问题在SO上提供的以下解决方案.

  1. /sf/ask/1689447511/
  2. 面对在录制视频时拍摄屏幕截图的问题
  3. 录制时拍摄相机屏幕截图 - 就像在Galaxy S3中一样?
  4. 在android中拍摄SurfaceView的屏幕截图
  5. 在Android中获取surfaceView的截图(这是正确答案,但部分回答.我已经要求@sajar解释答案)

互联网上的其他资源:
1.http ://www.coderanch.com/t/622613/Android/Mobile/capture-screenshot-simple-animation-project 2. http://www.phonesdevelopers.com/1795894/

到目前为止,这对我来说都没有.我也知道我们需要创建一些与Surface Holder交互并从中获取位图的Thread.但我不知道如何实现这一点.

任何帮助都得到高度赞赏.

android screenshot bitmap surfaceview

4
推荐指数
1
解决办法
7405
查看次数