使用AndroidFrameConverter将javacv框架转换为位图

使用AndroidFrameConverter将javacv框架转换为位图,第1张

概述我正在尝试使用javacvAndroidFrameConverter将大小为1280×720的帧转换为位图,并且转换需要很长时间.这是转换的示例代码.FrameGrabbergrabber=newFFmpegFrameGrabber(videoUrl);frame=grabber.grab();AndroidFrameConverterconverter=newAndroidFrameConverter();

我正在尝试使用javacv AndroidFrameConverter将大小为1280×720的帧转换为位图,并且转换需要很长时间.这是转换的示例代码.

FrameGrabber grabber = new FFmpegFrameGrabber(vIDeoUrl);frame = grabber.grab();AndroIDFrameConverter converter = new AndroIDFrameConverter();Bitmap originalBitmap = converter.convert(frame);

还有其他比这更快的解决方案吗?

解决方法:

您可以使用此代码并根据需要更改过滤器.

public class Filterasync extends AsyncTask {    private FFmpegFrameGrabber VIDEO_GRABBER;    private FFmpegFrameRecorder vIDeoRecorder;    private file file = new file(Environment.getExternalStorageDirectory() + "/Download/Abc.mp4");    private Context mContext;    private FFmpegFrameFilter filter;    private boolean isTrue = false;    private ArrayList<String> vIDeoPaths;    private file myDirectory;    public Filterasync(Context context) {        mContext = context;        VIDEO_GRABBER = new FFmpegFrameGrabber(file);        myDirectory = new file(Environment.getExternalStorageDirectory() + "/Folder/");        if (!myDirectory.exists()) {            myDirectory.mkdirs();        }        vIDeoPaths = new ArrayList<>();    }    @OverrIDe    protected voID onPreExecute() {        super.onPreExecute();    }    @OverrIDe    protected Object doInBackground(Object[] params) {        Frame tempVIDeoFrame;        try {            VIDEO_GRABBER.start();            initVIDeoRecorder(myDirectory + "/vIDeo" + System.currentTimeMillis() + ".mp4");            filter.start();            while (VIDEO_GRABBER.grab() != null) {                tempVIDeoFrame = VIDEO_GRABBER.grabImage();                if (tempVIDeoFrame != null) {                    filter.push(tempVIDeoFrame);                    tempVIDeoFrame = filter.pull();                    vIDeoRecorder.record(tempVIDeoFrame);                }            }            vIDeoRecorder.stop();            filter.stop();            vIDeoRecorder.release();            VIDEO_GRABBER.stop();            VIDEO_GRABBER.release();        } catch (FrameGrabber.Exception e) {            e.printstacktrace();        } catch (FrameRecorder.Exception e) {            e.printstacktrace();        } catch (FrameFilter.Exception e) {            e.printstacktrace();        }        return null;    }    @OverrIDe    protected voID onPostExecute(Object o) {        super.onPostExecute(o);    }    private voID initVIDeoRecorder(String path) {        try {            filter = new FFmpegFrameFilter("transpose=clock ,crop=w=640:h=480:x=0:y=0", VIDEO_GRABBER.getimageWIDth(), VIDEO_GRABBER.getimageHeight());            vIDeoRecorder = FFmpegFrameRecorder.createDefault(path, VIDEO_GRABBER.getimageWIDth(), VIDEO_GRABBER.getimageHeight());           vIDeoRecorder.setAudioChannels(VIDEO_GRABBER.getAudioChannels());            vIDeoRecorder.start();        } catch (FrameRecorder.Exception e) {            e.printstacktrace();        }    }}
总结

以上是内存溢出为你收集整理的使用AndroidFrameConverter将javacv框架转换为位图全部内容,希望文章能够帮你解决使用AndroidFrameConverter将javacv框架转换为位图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1120779.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存