相关疑难解决方法(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万
查看次数

截取Android OpenGL的截图

我正在尝试截取Android OpenGL的截图.

我找到的代码如下:

nt size = width * height;
    ByteBuffer buf = ByteBuffer.allocateDirect(size * 4);
    buf.order(ByteOrder.nativeOrder());
    glContext.glReadPixels(0, 0, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
    int data[] = new int[size];
    buf.asIntBuffer().get(data);
    buf = null;
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    bitmap.setPixels(data, size-width, -width, 0, 0, width, height);
    data = null;

    short sdata[] = new short[size];
    ShortBuffer sbuf = ShortBuffer.wrap(sdata);
    bitmap.copyPixelsToBuffer(sbuf);
    for (int i = 0; i < size; ++i) {
        //BGR-565 to RGB-565
        short v = sdata[i];
        sdata[i] = (short) (((v&0x1f) << …
Run Code Online (Sandbox Code Playgroud)

android opengl-es

20
推荐指数
3
解决办法
2万
查看次数

在Android上的主线程中使用OpenGL

我想GLES20在选择选项菜单中的项目时调用方法.

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.clear:
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
            break;
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我在main线程而不是GLThread.它说:

调用没有当前上下文的OpenGL ES API(每个线程记录一次)

但是我需要做些什么才能让事情发挥作用?

multithreading android opengl-es

9
推荐指数
1
解决办法
6723
查看次数

强制OpenGL Buffer使用GL 1.0或1.1?

我一直致力于一个项目,用户可以在其中与a交互以GLSurfaceView在屏幕上绘制形状.这一切都很好,花花公子,但现在我尝试做两件事:1)创建他们的绘图的缩略图,2)保存他们的绘图.重要的是要注意用户可以绘制比屏幕大的图像.

就我的研究表明,最好使用a Bitmap(可以是1)渲染到Canvas缩略图,2)保存到文件系统,这实现了我的两个目标).

最初,我试图RendererGLSurfaceView通道中读取glReadPixels,但事实证明我无法从中获取屏幕外数据.相反,我选择做一个离屏缓冲区来生成图像的渲染,可以将其转换为Bitmap.

我发现了一个可爱的帖子,它提供了一个名为的类的代码PixelBuffer,我现在正在使用它.(我做了一些调整,但无论是否有调整,我都会遇到所有问题.)

现在,当使用getBitmap()代码时(我将在PixelBuffer论坛帖子不可读的情况下发布),我得到了一堆called unimplemented OpenGL ES API.起初这让我很奇怪,所以我做了一些调查.事实证明,由于某种原因,PixelBuffer该类使用OpenGL ES 2.0,而GLSurfaceView使用的是OpenGL ES 1.1.我正在使用的设备(Galaxy Nexus)不支持2.0.(而且,我想支持最大范围的设备.)

所以,这是我的问题:如何强制我的PixelBuffer类使用OpenGL ES 1.1 API?我已经在我的清单中添加了以下内容:

<uses-feature android:glEsVersion="0x00010001" />
Run Code Online (Sandbox Code Playgroud)

另外,我试图设置版本使用int[] version = new int[] { 1, 1 };,但无济于事.

PixelBuffer我正在使用的代码:链接.调用的问题Renderer在第91行.版本代码在第39行开始.

这是我用来创建的代码PixelBuffer,从GLSurfaceView对象调用:

    setEGLConfigChooser(8, 8, 8, 8, 0, 0);
    mRenderer = …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es

5
推荐指数
1
解决办法
2216
查看次数

标签 统计

android ×4

opengl-es ×3

java ×1

multithreading ×1

surfaceview ×1