我是Android开发的新手,我在给定的频率上有一个帧提取应用程序。我总共可以提取80帧但超出此范围我在调试器和应用程序崩溃中出现此错误。 我需要提取至少800帧,我需要帮助,请在这里是我的代码
public void extractionFrame(final File file) throws IOException, JCodecException {
ArrayList<Bitmap> bArray = new ArrayList<>();
final ArrayList<Integer> rouge = new ArrayList<>();
final ArrayList<Integer> vert = new ArrayList<>();
final ArrayList<Integer> bleu = new ArrayList<>();
final ArrayList<ArrayList<Integer>> tabColor = new ArrayList<>();
if (file != null) {
if (file.exists()) {
final String path = file.getAbsolutePath();
final int nbrFrame = 200;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
final ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.setMessage("chargement");
progressDialog.setCancelable(false);
progressDialog.setTitle("please wait");
progressDialog.show();
Thread thread = new Thread() {
@Override
public void run() {
ArrayList rgb = new ArrayList();
int looper = 340000;
for (int i = 0; i < nbrFrame; i++) {
FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(path);
Bitmap b = mmr.getFrameAtTime(looper, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
rgb = extractRGB(b);
rouge.add((Integer) rgb.get(0));
vert.add((Integer) rgb.get(1));
bleu.add((Integer) rgb.get(2));
tabColor.add(rouge);
tabColor.add(vert);
tabColor.add(bleu);
rgb.clear();
mmr.release();
System.out.println("je suis le nombre de bitmap " + b + i);
looper += 34000;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
saveList(tabColor, getContext());
}
progressDialog.dismiss();
}
};
thread.start();
}
答案 0 :(得分:0)
您正尝试访问这些内容:
#undef __clang__
虽然你的rgb数组是空的。
显然
rouge.add((Integer) rgb.get(0));
vert.add((Integer) rgb.get(1));
bleu.add((Integer) rgb.get(2));
无效。您应该检查它是否返回任何内容。像这样:
rgb = extractRGB(b);
或类似的东西。
此外,如果您发布堆栈跟踪,则更容易帮助您。
如果这有帮助,请告诉我。