java - Capture screen with mouse pointer using xuggler -
following code capture screen , make video using xuggler , working fine, generated video not have mouse cursor in it. want capture mouse pointer show mouse activity.
can 1 guide me on this.
package com.test.video; import java.awt.awtexception; import java.awt.dimension; import java.awt.graphics2d; import java.awt.image; import java.awt.mouseinfo; import java.awt.rectangle; import java.awt.robot; import java.awt.toolkit; import java.awt.image.bufferedimage; import java.io.ioexception; import java.util.concurrent.timeunit; import javax.imageio.imageio; import com.xuggle.mediatool.imediawriter; import com.xuggle.mediatool.toolfactory; import com.xuggle.xuggler.icodec; public class screenrecordingexample { private static final double frame_rate = 5; private static final int seconds_to_run_for = 120; private static final string outputfilename = "c:/mydesktop.mp4"; private static dimension screenbounds; private static graphics2d imagegraphics; public static image m_mouseicon = null; public static void main(string[] args) { // let's make imediawriter write file. final imediawriter writer = toolfactory.makewriter(outputfilename); screenbounds = toolkit.getdefaulttoolkit().getscreensize(); // tell we're going add 1 video stream, id 0, // @ position 0, , have fixed frame rate of frame_rate. writer.addvideostream(0, 0, icodec.id.codec_id_mpeg4, screenbounds.width/2, screenbounds.height/2); long starttime = system.nanotime(); try { m_mouseicon = imageio.read(screenrecordingexample.class.getresource("resource/captionmouseicon.png")); } catch (ioexception e1) { // todo auto-generated catch block e1.printstacktrace(); } (int index = 0; index < seconds_to_run_for * frame_rate; index++) { // take screen shot bufferedimage screen = getdesktopscreenshot(); // convert right image type bufferedimage bgrscreen = converttotype(screen, bufferedimage.type_3byte_bgr); // encode image stream #0 writer.encodevideo(0, bgrscreen, system.nanotime() - starttime, timeunit.nanoseconds); // sleep frame rate milliseconds try { thread.sleep((long) (1000 / frame_rate)); } catch (interruptedexception e) { // ignore } } // tell writer close , write trailer if needed writer.close(); } public static bufferedimage converttotype(bufferedimage sourceimage, int targettype) { bufferedimage image; // if source image target type, return source image if (sourceimage.gettype() == targettype) { image = sourceimage; } // otherwise create new image of target type , draw new image else { image = new bufferedimage(sourceimage.getwidth(), sourceimage.getheight(), targettype); image.getgraphics().drawimage(sourceimage, 0, 0, null); } return image; } private static bufferedimage getdesktopscreenshot() { try { robot robot = new robot(); rectangle capturesize = new rectangle(screenbounds); return robot.createscreencapture(capturesize); } catch (awtexception e) { e.printstacktrace(); return null; } } }
thanks,
use mouseinfo.getpointerinfo().getlocation()
obtain current position of pointer. draw 'close facsimile of'(1) pointer @ point
on bufferedimage
.
1) screenshooter, use gif image of pointer.
Comments
Post a Comment