-1

たとえば、出力を取得するために 1 つの画像のみをエンコードしています。以下は私がやったことです。機能していません。クラッシュもありません。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {

        File wallpaperDirectory = new File("/sdcard/Wallpaper/");
        // have the object build the directory structure, if needed.
        wallpaperDirectory.mkdirs();

        File file = new File(wallpaperDirectory, "output.mp4");
        SequenceEncoder encoder = new SequenceEncoder(file);

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
        encoder.encodeNativeFrame(this.fromBitmap(bitmap));

        encoder.finish();
    } catch (IOException e) {
        e.printStackTrace();
    }

}


// convert from Bitmap to Picture (jcodec native structure)
public Picture fromBitmap(Bitmap src) {
    Picture dst = Picture.create(src.getWidth(), src.getHeight(), ColorSpace.RGB);
    fromBitmap(src, dst);
    return dst;
}



public void fromBitmap(Bitmap src, Picture dst) {
    int[] dstData = dst.getPlaneData(0);
    int[] packed = new int[src.getWidth() * src.getHeight()];

    src.getPixels(packed, 0, src.getWidth(), 0, 0, src.getWidth(), src.getHeight());

    for (int i = 0, srcOff = 0, dstOff = 0; i < src.getHeight(); i++) {
        for (int j = 0; j < src.getWidth(); j++, srcOff++, dstOff += 3) {
            int rgb = packed[srcOff];
            dstData[dstOff] = (rgb >> 16) & 0xff;
            dstData[dstOff + 1] = (rgb >> 8) & 0xff;
            dstData[dstOff + 2] = rgb & 0xff;
        }
    }
}
4

1 に答える 1