Formación de Animaciones
Descripción
En el caso de animaciones se puede trabajar con la clase MediaTracker. Se crea un objeto mediante
```
tracker = new MediaTracker(this);
```
Se obtiene el puntero a una imagen de fondo
```
bg = getImage(getDocumentBase(),""images/background.gif"");
```
Se carga la imagen de fondo
```
tracker.addImage(bg, 0);
```
y se van cargando todas las imagenes de la serie
```
for (int i = 0; i < 5; i++){
anim[i] = getImage(getDocumentBase(),"images/anim"+i+".gif");
tracker.addImage(anim[i], 1);
}
```
ID:(1247, 0)
Ejemplo de Generador de GIF
Descripción
Para formar una animación basta con agregar las distintas imagenes formando un archivo de formato GIF:
```
import javax.imageio.*;
import javax.imageio.metadata.*;
import javax.imageio.stream.*;
import java.awt.image.*;
import java.io.*;
import java.util.Iterator;
public class GifSequenceWriter {
protected ImageWriter gifWriter;
protected ImageWriteParam imageWriteParam;
protected IIOMetadata imageMetaData;
public GifSequenceWriter(
ImageOutputStream outputStream,
int imageType,
int timeBetweenFramesMS,
boolean loopContinuously) throws IIOException, IOException {
gifWriter = getWriter();
imageWriteParam = gifWriter.getDefaultWriteParam();
ImageTypeSpecifier imageTypeSpecifier =
ImageTypeSpecifier.createFromBufferedImageType(imageType);
imageMetaData =
gifWriter.getDefaultImageMetadata(imageTypeSpecifier,
imageWriteParam);
String metaFormatName = imageMetaData.getNativeMetadataFormatName();
IIOMetadataNode root = (IIOMetadataNode)
imageMetaData.getAsTree(metaFormatName);
IIOMetadataNode graphicsControlExtensionNode = getNode(
root,
"GraphicControlExtension");
graphicsControlExtensionNode.setAttribute("disposalMethod", "none");
graphicsControlExtensionNode.setAttribute("userInputFlag", "FALSE");
graphicsControlExtensionNode.setAttribute(
"transparentColorFlag",
"FALSE");
graphicsControlExtensionNode.setAttribute(
"delayTime",
Integer.toString(timeBetweenFramesMS / 10));
graphicsControlExtensionNode.setAttribute(
"transparentColorIndex",
"0");
IIOMetadataNode commentsNode = getNode(root, "CommentExtensions");
commentsNode.setAttribute("CommentExtension", "Created by MAH");
IIOMetadataNode appEntensionsNode = getNode(
root,
"ApplicationExtensions");
IIOMetadataNode child = new IIOMetadataNode("ApplicationExtension");
child.setAttribute("applicationID", "NETSCAPE");
child.setAttribute("authenticationCode", "2.0");
int loop = loopContinuously ? 0 : 1;
child.setUserObject(new byte[]{ 0x1, (byte) (loop & 0xFF), (byte)
((loop >> 8) & 0xFF)});
appEntensionsNode.appendChild(child);
imageMetaData.setFromTree(metaFormatName, root);
gifWriter.setOutput(outputStream);
gifWriter.prepareWriteSequence(null);
}
public void writeToSequence(RenderedImage img) throws IOException {
gifWriter.writeToSequence(
new IIOImage(
img,
null,
imageMetaData),
imageWriteParam);
}
public void close() throws IOException {
gifWriter.endWriteSequence();
}
private static ImageWriter getWriter() throws IIOException {
Iterator
if(!iter.hasNext()) {
throw new IIOException("No GIF Image Writers Exist");
} else {
return iter.next();
}
}
private static IIOMetadataNode getNode(
IIOMetadataNode rootNode,
String nodeName) {
int nNodes = rootNode.getLength();
for (int i = 0; i < nNodes; i++) {
if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName)
== 0) {
return((IIOMetadataNode) rootNode.item(i));
}
}
IIOMetadataNode node = new IIOMetadataNode(nodeName);
rootNode.appendChild(node);
return(node);
}
public static void main(String[] args) throws Exception {
if (args.length > 1) {
BufferedImage firstImage = ImageIO.read(new File(args[0]));
ImageOutputStream output =
new FileImageOutputStream(new File(args[args.length - 1]));
GifSequenceWriter writer =
new GifSequenceWriter(output, firstImage.getType(), 1, false);
writer.writeToSequence(firstImage);
for(int i=1; i BufferedImage nextImage = ImageIO.read(new File(args[i])); writer.writeToSequence(nextImage); } writer.close(); output.close(); } else { System.out.println( "Formato: java GifSequenceWriter [lista de archivos] [archivo entregado]"); } } } ```
ID:(379, 0)
MonteMedia Capturador de Pantalla
Descripción
Una de las rutinas para grabar un video de lo que esta ocurriendo en la pantalla se puede construir con la libreria:
que se describe en la página web randelshofer.ch
Primero hay que cerar la configuración:
```
GraphicsConfiguration gc = GraphicsEnvironment.
getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getDefaultConfiguration();
int screenRate = 15;
int bitDepth = 16; // 8, 16, 24
java.lang.Float quality = 1.0f;
// mouse
java.lang.Integer mouseRate = 15; // 30
// audio
java.lang.Float audioRate = 8000f;
java.lang.Integer audioBitsPerSample = 8; // 8, 16
java.lang.Integer audioChannels = 2;
```
Con la configuración se puede iniciar la filmación:
```
try {
// start filming
pScreen = new ScreenRecorder(
gc,
new Rectangle(
pScreen_pt.x,
pScreen_pt.y,
780,
600),
new Format(
MediaTypeKey,
MediaType.FILE,
MovieFolder,
"",
MovieFile,
smovie_file,
MimeTypeKey, MIME_AVI),
new Format(
MediaTypeKey,
MediaType.VIDEO,
EncodingKey,
ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey,
COMPRESSOR_NAME_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey,
bitDepth,
FrameRateKey,
Rational.valueOf(screenRate),
QualityKey,
quality, KeyFrameIntervalKey,
screenRate * 60),
new Format(
MediaTypeKey,
MediaType.VIDEO,
EncodingKey,
"black",
FrameRateKey,
Rational.valueOf(mouseRate)),
new Format(
MediaTypeKey,
MediaType.AUDIO,
SampleRateKey,
Rational.valueOf(audioRate),
SampleSizeInBitsKey,
audioBitsPerSample,
ChannelsKey,
audioChannels));
pScreen.start();
} catch (IOException e) {
e.printStackTrace();
} catch (AWTException e) {
e.printStackTrace();
}
```
Una vez se ha filmado se puede terminar esta:
```
try { // stop filming
pScreen.stop();
} catch (IOException e) {
e.printStackTrace();
}
pbtnclape.resetImage(0,"CLAPBOARD");
```
ID:(8826, 0)
Cámara Web
Descripción
Una de las rutinas para capturar la cámara web se puede construir con la librería:
La página web de la librería es:
Para sacar una imagen simplemente se usa:
```
Webcam webcam = Webcam.getDefault();
webcam.open();
ImageIO.write(webcam.getImage(), "PNG", new File("hello-world.png"));
```
ID:(1805, 0)