2015-05-23 4 views
1

Пару недель назад я внедрил этот метод https://github.com/libgdx/libgdx/wiki/Take-a-Screenshot
И он отлично работал с libgdx 1.3.1. Теперь, хотя я обновился до 1.6.0, и он перестает работать. Когда метод выполняется, он зависает. Я его реализовал на кнопке, и он застревает в «downclick», и больше ничего не происходит.Libgdx Метод скриншота не работает

private void saveScreenshot() { 
    try{ 
     FileHandle fh; 
     do{ 
      fh = new FileHandle(files.getLocalStoragePath() + "screenshot" + ".png"); 

     }while(fh.exists()); 

     Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() - 130, true); 
     PixmapIO.writePNG(fh, pixmap); 
     pixmap.dispose(); 
     System.out.println("Path:" + fh.toString()); 

    }catch(Exception e) { 

    } 
} 
private Pixmap getScreenshot(int x, int y, int w, int h, boolean yDown){ 

    final Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, w, h); 
    w = pixmap.getWidth(); 
    h = pixmap.getHeight(); 
    if(yDown) { 
     ByteBuffer pixels = pixmap.getPixels(); 
     int numBytes = w * h * 4; 
     byte[] lines = new byte[numBytes]; 
     int numBytesPerLine = w * 4; 
     for (int i = 0; i < h; i++) { 
      pixels.position((h - i - 1) * numBytesPerLine); 
      pixels.get(lines, i * numBytesPerLine, numBytesPerLine); 
     } 

     pixels.clear(); 
     pixels.put(lines); 
    } 
    return pixmap; 
} 

btnArrow.addListener(new ChangeListener() { 
     //photoshop "save" and "back" on arrow/back image to clarify. 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
      saveScreenshot(); 
      sharePhoto(); 

     } 
    }); 

Я поделился имиджю на facebook, а также. И этот метод, конечно, в AndroidLauncher и передается через интерфейс. А вот Принести скриншот:

public void sharePhoto() { 
    Matrix matrix = new Matrix(); 

    String filePath = (files.getLocalStoragePath() + "screenshot" + ".png"); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 
    Bitmap rotateBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 


    //Starts sharing process 
    SharePhoto photo = new SharePhoto.Builder() 
      .setBitmap(rotateBit) 
      .build(); 
    SharePhotoContent content = new SharePhotoContent.Builder() 
      .addPhoto(photo) 
      .build(); 
    share.show(content); 

} 

Так что я считаю, может быть проблемой является libgdx сделали изменения в классе Pixmap или Bitmap класса какой-то. Поскольку совместное использование ссылки через facebook на этой кнопке отлично работает.

Я также напечатали путь, как вы можете видеть в saveScreenshot() и возвращает этот

selinux_android_setcategory: no category for userid: 0, path: /data/data/com.sparc.tormt.android/lib 

ответ

2

ли он застрял, потому что это бесконечный цикл, если файл уже существует:

do { 
    fh = new FileHandle(files.getLocalStoragePath() + "screenshot" + ".png"); 
} while(fh.exists()); 
+0

Да он застревает. Я прочитал документы, и он должен перезаписать уже существующее изображение, если оно есть. Но как вы предлагаете это делать? Потому что он застревает, как вы говорите. – Benni

+0

Просто удалите этот цикл? Я думаю, что цикл является попыткой найти «уникальное» имя для файла и должен сделать что-то вроде: «var name = files.getLocalStoragePath() +« screenshot »+ (i ++) +« .png »; '(Обратите внимание на« i ++ », чтобы сделать имя по-разному на каждой итерации цикла. Но я просто догадываюсь.) –

Смежные вопросы