2015年5月4日 星期一

make a video from a series of bitmaps.

Recently I've seen a StackOverFlow question help to make a video from a series of bitmaps using jcodec.
Quite interesting....here's the code and link.
Haven't try it yet, must give it a try someday.
 try {   
   File file = this.GetSDPathToFile("", "output.mp4");  
   SequenceEncoder encoder = new SequenceEncoder(file);  
   // only 5 frames in total   
   for (int i = 1; i <= 5; i++) {  
     // getting bitmap from drawable path   
     int bitmapResId = this.getResources().getIdentifier("image" + i, "drawable", this.getPackageName());  
     Bitmap bitmap = this.getBitmapFromResources(this.getResources(), bitmapResId);  
     encoder.encodeNativeFrame(this.fromBitmap(bitmap));  
   }   
   encoder.finish();  
 } catch (IOException e) {  
   e.printStackTrace();  
 }   
 // get full SD path   
 File GetSDPathToFile(String filePatho, String fileName) {  
   File extBaseDir = Environment.getExternalStorageDirectory();  
   if (filePatho == null || filePatho.length() == 0 || filePatho.charAt(0) != '/')  
     filePatho = "/" + filePatho;  
   makeDirectory(filePatho);  
   File file = new File(extBaseDir.getAbsoluteFile() + filePatho);  
   return new File(file.getAbsolutePath() + "/" + fileName);// file;  
 }   
 // convert from Bitmap to Picture (jcodec native structure)   
 public Picture fromBitmap(Bitmap src) {  
   Picture dst = Picture.create((int)src.getWidth(), (int)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;  
     }   
   }   
 }   


沒有留言:

張貼留言