rlm@3: /** rlm@3: * @(#)Main.java 1.2 2009-08-29 rlm@3: * rlm@3: * Copyright (c) 2008-2009 Werner Randelshofer, Immensee, Switzerland. rlm@3: * All rights reserved. rlm@3: * rlm@3: * You may not use, copy or modify this file, except in compliance with the rlm@3: * license agreement you entered into with Werner Randelshofer. rlm@3: * For details see accompanying license terms. rlm@3: */ rlm@3: package com.aurellem.capture; rlm@3: rlm@3: import java.awt.*; rlm@3: import java.awt.image.BufferedImage; rlm@3: import java.awt.image.IndexColorModel; rlm@3: import java.io.*; rlm@3: import java.util.Random; rlm@3: rlm@10: import ca.randelshofer.AVIOutputStream; rlm@9: rlm@3: rlm@3: /** rlm@3: * Main. rlm@3: * rlm@3: * @author Werner Randelshofer rlm@3: * @version 1.1 2009-08-29 Added raw output. rlm@3: *
1.0 2008-00-15 Created. rlm@3: */ rlm@3: public class Main { rlm@3: rlm@3: /** rlm@3: * @param args the command line arguments rlm@3: */ rlm@3: public static void main(String[] args) { rlm@3: try { rlm@3: test(new File("/home/r/avidemo-jpg.avi"), AVIOutputStream.VideoFormat.JPG, 24, 1f); rlm@3: test(new File("/home/r/avidemo-png.avi"), AVIOutputStream.VideoFormat.PNG, 24, 1f); rlm@3: test(new File("/home/r/avidemo-raw.avi"), AVIOutputStream.VideoFormat.RAW, 24, 1f); rlm@3: test(new File("/home/r/avidemo-rle8.avi"), AVIOutputStream.VideoFormat.RLE, 8, 1f); rlm@3: test(new File("avidemo-rle4.avi"), AVIOutputStream.VideoFormat.RLE, 4, 1f); rlm@3: rlm@3: } catch (IOException ex) { rlm@3: ex.printStackTrace(); rlm@3: } rlm@3: } rlm@3: rlm@3: private static void test(File file, AVIOutputStream.VideoFormat format, int depth, float quality) throws IOException { rlm@3: System.out.println("Writing " + file); rlm@3: AVIOutputStream out = null; rlm@3: Graphics2D g = null; rlm@3: try { rlm@3: out = new AVIOutputStream(file, format, depth); rlm@3: out.setVideoCompressionQuality(quality); rlm@3: rlm@3: out.setTimeScale(1); rlm@3: out.setFrameRate(30); rlm@3: rlm@3: Random rnd = new Random(0); // use seed 0 to get reproducable output rlm@3: BufferedImage img; rlm@3: switch (depth) { rlm@3: case 24: rlm@3: default: { rlm@3: img = new BufferedImage(320, 160, BufferedImage.TYPE_INT_RGB); rlm@3: break; rlm@3: } rlm@3: case 8: { rlm@3: byte[] red = new byte[256]; rlm@3: byte[] green = new byte[256]; rlm@3: byte[] blue = new byte[256]; rlm@3: for (int i = 0; i < 255; i++) { rlm@3: red[i] = (byte) rnd.nextInt(256); rlm@3: green[i] = (byte) rnd.nextInt(256); rlm@3: blue[i] = (byte) rnd.nextInt(256); rlm@3: } rlm@3: rnd.setSeed(0); // set back to 0 for reproducable output rlm@3: img = new BufferedImage(320, 160, BufferedImage.TYPE_BYTE_INDEXED, new IndexColorModel(8, 256, red, green, blue)); rlm@3: break; rlm@3: } rlm@3: case 4: { rlm@3: byte[] red = new byte[16]; rlm@3: byte[] green = new byte[16]; rlm@3: byte[] blue = new byte[16]; rlm@3: for (int i = 0; i < 15; i++) { rlm@3: red[i] = (byte) rnd.nextInt(16); rlm@3: green[i] = (byte) rnd.nextInt(16); rlm@3: blue[i] = (byte) rnd.nextInt(16); rlm@3: } rlm@3: rnd.setSeed(0); // set back to 0 for reproducable output rlm@3: img = new BufferedImage(320, 160, BufferedImage.TYPE_BYTE_BINARY, new IndexColorModel(4, 16, red, green, blue)); rlm@3: break; rlm@3: } rlm@3: } rlm@3: g = img.createGraphics(); rlm@3: g.setBackground(Color.WHITE); rlm@3: g.clearRect(0, 0, img.getWidth(), img.getHeight()); rlm@3: rlm@3: for (int i = 0; i < 100; i++) { rlm@3: g.setColor(new Color(rnd.nextInt())); rlm@3: g.fillRect(rnd.nextInt(img.getWidth() - 30), rnd.nextInt(img.getHeight() - 30), 30, 30); rlm@3: out.writeFrame(img); rlm@3: } rlm@3: rlm@3: } finally { rlm@3: if (g != null) { rlm@3: g.dispose(); rlm@3: } rlm@3: if (out != null) { rlm@3: out.close(); rlm@3: } rlm@3: } rlm@3: } rlm@3: }