Anda di halaman 1dari 24

PRAKTIKUM DESAIN DAN APLIKASI MULTIMEDIA

MODUL VI & VII

OLEH :
AKHMAD AFFANDI
201110370311407

LABORATORIUM DAM
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2012 / 2013

Modul 6

Percobaan 1: Membuat interface ImageSequenceListener


public interface ImageSequenceListener {
void sequenceEnded(String imageName);
}
Percobaan 2 : Membuat class ImageManager
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.io.*;
import javax.imageio.*;
public class ImageManager {
private final static String IMAGE_DIR = "images/";
private HashMap imagesMap;
private String path;
private GraphicsConfiguration gc;
public ImageManager() {
initManager();
}
public ImageManager(String imPath) {
initManager();
path = imPath;
}
private void initManager() {
imagesMap = new HashMap();
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
path = IMAGE_DIR;
}
// --------- load a single image ------------------------------public boolean loadSingleImage(String fnm) {
String name = getPrefix(fnm);
if (imagesMap.containsKey(name)) {
System.out.println("Error: " + name + "sudah digunakan");
return false;
}
BufferedImage bi = loadImage(fnm);
if (bi != null) {
ArrayList imsList = new ArrayList();

imsList.add(bi);
imagesMap.put(name, imsList);
System.out.println(" disimpan " + name + "/" + fnm);
return true;
} else {
return false;
}

}
// --------- load numbered images ------------------------------public int loadNumImages(String fnm, int number) {
String prefix = getPrefix(fnm);
String postfix = getPosfix(fnm);
String imFnm;
BufferedImage bi;
ArrayList imsList = new ArrayList();
int loadCount = 0;
if (imagesMap.containsKey(prefix)) {
System.out.println("Error: " + prefix + "sudah digunakan");
return 0;
}
if (number <= 0) {
System.out.println("Error: Number <= 0: " + number);
imFnm = prefix + postfix;
if ((bi = loadImage(imFnm)) != null) {
loadCount++;
imsList.add(bi);
System.out.println(" disimpan " + prefix + "/" + imFnm);
}
} else { // load prefix + <i> + postfix, where i = 0 to <number-1>
System.out.print(" Menambahkan " + prefix + "/"
+ prefix + "*" + postfix + "... ");
for (int i = 0; i < number; i++) {
imFnm = prefix + i + postfix;
if ((bi = loadImage(imFnm)) != null) {
loadCount++;
imsList.add(bi);
System.out.print(i + " ");
}

}
System.out.println();

}
if (loadCount == 0) {
System.out.println("Tidak ada image dengan prefix " + prefix);
} else {
imagesMap.put(prefix, imsList);

}
return loadCount;

}
//--------- Separating prefx and postfix ------------------------------private String getPrefix(String fnm) // extract name before '.' of filename
{
int posn;
if ((posn = fnm.lastIndexOf(".")) == -1) {
System.out.println("Prefix tidak ditemukan untuk nama file: " + fnm);
return fnm;
} else {
return fnm.substring(0, posn);
}
} // end of getPrefix()
private String getPosfix(String fnm) // extract name after '.' of filename
{
int posn;
if ((posn = fnm.lastIndexOf(".")) == -1) {
System.out.println("Posfix tidak ditemukan untuk nama file: " + fnm);
return fnm;
} else {
return fnm.substring(posn);
}
}
// --------- load image strip ------------------------------public int loadStripImages(String fnm, int column, int row) {
String name = getPrefix(fnm);
if (imagesMap.containsKey(name)) {
System.out.println("Error: " + name + " sudah digunakan");
return 0;
}
// load the images into an array
BufferedImage[] strip = loadStripImageArray(fnm, column, row);
if (strip == null) {
return 0;
}
ArrayList imsList = new ArrayList();
int loadCount = 0;
System.out.print(" menambahkan " + name + "/" + fnm + "... ");
for (int i = 0; i < strip.length; i++) {
loadCount++;

imsList.add(strip[i]);
System.out.print(i + " ");

}
System.out.println();
if (loadCount == 0) {
System.out.println("Tidak ada image dengan prefix " + name);
} else {
imagesMap.put(name, imsList);
}
return loadCount;
} // end of loadStripImages()
private BufferedImage[] loadStripImageArray(String fnm, int column, int row) {
if (column <= 0) {
System.out.println("column <= 0; returning null");
return null;
}
BufferedImage stripIm;
if ((stripIm = loadImage(fnm)) == null) {
System.out.println("Return null");
return null;
}
int imWidth = (int) stripIm.getWidth() / column;
int imHeight = (int) stripIm.getHeight() / row;
int transparency = stripIm.getColorModel().getTransparency();
BufferedImage[] strip = new BufferedImage[column * row];
Graphics2D stripGC;
for (int i = 0; i < row; i++) {
for (int j = i * column; j < (i + 1) * column; j++) {
int fx = (j % column) * imWidth;
int fy = i * imHeight;
strip[j] = gc.createCompatibleImage(imWidth, imHeight,
transparency);
stripGC = strip[j].createGraphics();
stripGC.setComposite(AlphaComposite.Src);
stripGC.drawImage(stripIm, 0, 0, imWidth, imHeight,
fx, fy, fx + imWidth, fy + imHeight, null);
stripGC.dispose();
}
}
return strip;
} // end of loadStripImageArray()
// ------------------ access methods ------------------public BufferedImage getImage(String name) {
ArrayList imsList = (ArrayList) imagesMap.get(name);

if (imsList == null) {
System.out.println("Tidak ada image dengan nama " + name);
return null;
}
return (BufferedImage) imsList.get(0);
} // end of getImage() with name input;
public BufferedImage getImage(String name, int posn) {
ArrayList imsList = (ArrayList) imagesMap.get(name);
if (imsList == null) {
System.out.println("Tidak ada image dengan nama " + name);
return null;
}
int size = imsList.size();
if (posn < 0) {
return (BufferedImage) imsList.get(0); // return first image
} else if (posn >= size) {
int newPosn = posn % size; // modulo
return (BufferedImage) imsList.get(newPosn);
}
return (BufferedImage) imsList.get(posn);
} // end of getImage() with posn input;
public ArrayList getImages(String name) {
ArrayList imsList = (ArrayList) imagesMap.get(name);
if (imsList == null) {
System.out.println("Tidak ada image dengan nama " + name);
return null;
}
return imsList;
}
public boolean isLoaded(String name) {
ArrayList imsList = (ArrayList) imagesMap.get(name);
if (imsList == null) {
return false;
}
return true;
}
public int numImages(String name) {
ArrayList imsList = (ArrayList) imagesMap.get(name);
if (imsList == null) {
System.out.println("Tidak ada image dengan nama " + name);
return 0;
}
return imsList.size();
}

//
public void setPath(String path) {
this.path = path;
}
// ------------------- Image Input -----------------private BufferedImage loadImage(String fnm) {
try {
BufferedImage im;
if (path.equals(IMAGE_DIR)) {
im = ImageIO.read(getClass().getResource(path + fnm));
} else {
im = ImageIO.read(new File(path + "/" + fnm));
}
int transparency = im.getColorModel().getTransparency();
BufferedImage copy = gc.createCompatibleImage(
im.getWidth(), im.getHeight(),
transparency);
// membuat graphics context
Graphics2D g2d = copy.createGraphics();
// g2d.setComposite(AlphaComposite.Src);
g2d.drawImage(im, 0, 0, null);
g2d.dispose();
return copy;
} catch (IOException e) {
System.out.println("Gagal memuat "
+ path + "/" + fnm + ":\n" + e);
return null;
}
}

}
Object :
g2d.drawImage(im, 0, 0, null); (digunakan untuk memanggil gambar yang akan di
tampilkan)
g2d.dispose();(dispose yang image)
Methode :
public BufferedImage getImage(String name)
public BufferedImage getImage(String name, int posn)
Percobaan 3 : Membuat class ImageAnimator
import java.awt.image.*;
public class ImageAnimator
{
private String imName;
private boolean isRepeating, ticksIgnored;

private ImageManager imsMgr;


private int animPeriod;
// waktu yang dibutuhkan untuk satu animasi (dalam milidetik)
private long animTotalTime;
private int showPeriod;
// Waktu untuk menampilkan animasi saat ini (dalam milidetik)
private double seqDuration;
// total waktu yang dibutuhkan untuk keseluruhan animasi
private int numImages;
// jumlah keseluruhan gambar
private int imPosition; // Posisi gambar terkini
private ImageSequenceListener listener = null;
public ImageAnimator(String nm, int ap, double d,boolean isr, ImageManager
il)
{
imName = nm;
animPeriod = ap;
seqDuration = d;
isRepeating = isr;
imsMgr = il;
animTotalTime = 0L;
if (seqDuration < 0.5) {
System.out.println("Warning: durasi minimal 0.5 sec.");
seqDuration = 0.5;
}
if (!imsMgr.isLoaded(imName)) {
System.out.println(imName + " Tidak diketahui oleh imageManager");
numImages = 0;
imPosition = -1;
ticksIgnored = true;
}
else {
numImages = imsMgr.numImages(imName);
imPosition = 0;
ticksIgnored = false;
showPeriod = (int) (1000 * seqDuration / numImages);
}
}
public void updateTick()
/* diasumsikan method ini di panggil sesuai dengan periode animasi (dalam
ms) */
{
if (!ticksIgnored) {
// update total waktu animasi, modulo waktu animasi dengan duras sequence
animTotalTime = (animTotalTime + animPeriod) % (long)(1000 *

seqDuration);
// menghitung image terkini
imPosition = (int) (animTotalTime / showPeriod); // dalam jarak 0sampai jumlah
gambar-1
if ((imPosition == numImages-1) && (!isRepeating)) { // sequence
ticksIgnored = true; // update tick diabaikan
if (listener != null)
listener.sequenceEnded(imName); // mengirimkan pesan ke listener
}
}
}
public BufferedImage getCurrentImage()
{ if (numImages != 0)
return imsMgr.getImage(imName, imPosition);
else
return null;
}
public int getCurrentPosition()
{ return imPosition; }
public void addImageSequenceListener(ImageSequenceListener l)
{ listener = l; }
public void stop()
/* update tick diabaikan */
{ ticksIgnored = true; }
public boolean isStopped()
{ return ticksIgnored; }
public boolean atSequenceEnd()
// check apakah sequence selesai
{ return ((imPosition == numImages-1) && (!isRepeating)); }
public void stopAt(int pos){
imPosition=pos;
ticksIgnored = true;
}
public void restartAt(int imPosn)
/* memulai menampilkan gambar sesuai dengan posisi yang diberikan */
{
if (numImages != 0) {
if ((imPosn < 0) || (imPosn > numImages-1)) {

System.out.println("Posisi restart salah, Mulai dari 0");


imPosn = 0;

imPosition = imPosn;
animTotalTime = (long) imPosition * showPeriod;
ticksIgnored = false;

}
}
public void resume()
{
if (numImages != 0)
ticksIgnored = false;
}

Methode :
public void restartAt(int imPosn)(memulai menampilkan gambar sesuai dengan
posisi yang diberikan)
public void resume()(mengulang gambar)
Object :
public ImageAnimator(String nm, int ap, double d,boolean isr, ImageManager
il)(digunakan sebagai objek untuk pemanggilan dari class image animator)
public BufferedImage getCurrentImage()
Percobaan 4 : Membuat class ImageTest1
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
public class ImageTest1 extends JFrame{
Image
Background,JeniOpaque,JeniTransparant,JeniTranscluent,JeniAATranscluent;
BufferedImage im;
public ImageTest1(){
super("ImageTest");
this.setSize(420,500);
try{

im =
ImageIO.read(getClass().getResource("images/Background.png"));
Background =
ImageIO.read(getClass().getResource("images/Background.png"));
JeniOpaque=
ImageIO.read(getClass().getResource("images/JeniOpaque.png"));

JeniTransparant=
ImageIO.read(getClass().getResource("images/JeniTransparant.png"));
JeniTranscluent=
ImageIO.read(getClass().getResource("images/JeniTranscluent.png"));
JeniAATranscluent=
ImageIO.read(getClass().getResource("images/JeniAATranscluent.png"));
}catch(IOException e){
System.out.println(e.toString());
}
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

}
public void paint(Graphics g){
Graphics2D g2d;
g2d= (Graphics2D) g;
g.drawImage(im,0,0,500,500,this);
// g.drawImage(Background,0,0,500,500,this);
g.drawImage(JeniOpaque,10,50,200,200,this);
g.drawImage(JeniTransparant,210,50,200,200,this);
g.drawImage(JeniTranscluent,10,250,200,200,this);
g.drawImage(JeniAATranscluent,210,250,200,200,this);
}
public static void main(String [] ags){
new ImageTest1();
}

}
Object :
g.drawImage(JeniOpaque,10,50,200,200,this);( membentuk gambar JeniOpaque)
g.drawImage(JeniTransparant,210,50,200,200,this);( membentuk gambar
Transaparant)
Methode :
public void paint(Graphics g) (methode yang digunakan untuk mewarani objek yang
akan di tampilkan)
public static void main(String [] ags){
new ImageTest1();
}(methode yang di gunakan untuk menampilkan atau memanggil imageTest1)
Output Percobaan 4 : Membuat class ImageTest1

Percobaan 5 : Membuat class ImagesTest2


import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.imageio.*;
import java.io.*;
import java.text.DecimalFormat;
public class ImagesTest2 extends JPanel implements
ImageSequenceListener, Runnable {
private static final int PERIOD = 50; // 0.05 secs
private static final int PWIDTH = 600;
// size of this panel
private static final int PHEIGHT = 400;
private ImageManager imsLoader; // the image loader
private ImageAnimator mihPlayer, catsPlayer,
kaboomPlayer, jeballPlayer, numbersPlayer;
Thread t;
public ImagesTest2() {
setBackground(Color.white);
setPreferredSize(new Dimension(PWIDTH, PHEIGHT));
imsLoader = new ImageManager();

imsLoader.setPath("jeni6/images");
try {
imsLoader.loadNumImages("25_04_.gif", 15);
imsLoader.loadNumImages("numbers.gif", 6);
imsLoader.loadStripImages("boom.png", 5, 1);
imsLoader.loadStripImages("ball.png", 8, 4);
imsLoader.loadStripImages("cats.gif", 6, 1);
} catch (Exception e) {
System.out.println(e.toString());
}
initImages();
t = new Thread(this);

private void initImages() {


mihPlayer =
new ImageAnimator("25_04_", PERIOD, 1.5, true, imsLoader);
numbersPlayer =
new ImageAnimator("numbers", PERIOD, 6, false, imsLoader);
numbersPlayer.addImageSequenceListener(this);
catsPlayer =
new ImageAnimator("cats", PERIOD, 0.5, true, imsLoader);
kaboomPlayer =
new ImageAnimator("boom", PERIOD, 1, true, imsLoader);
jeballPlayer =
new ImageAnimator("ball", PERIOD, 1, true, imsLoader);
}
public void sequenceEnded(String imageName) {
System.out.println(imageName + " sequence has ended");
}
private void imagesUpdate() {
mihPlayer.updateTick();
numbersPlayer.updateTick();
catsPlayer.updateTick();
kaboomPlayer.updateTick();
jeballPlayer.updateTick();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// clear the background

g2d.setColor(Color.blue);
g2d.fillRect(0, 0, PWIDTH, PHEIGHT);
drawImage(g2d, mihPlayer.getCurrentImage(), 10, 10);
drawImage(g2d, numbersPlayer.getCurrentImage(), 200, 10);
// --------------- strip images ---------------------drawImage(g2d, catsPlayer.getCurrentImage(), 10, 235);
drawImage(g2d, kaboomPlayer.getCurrentImage(), 400, 10);
drawImage(g2d, jeballPlayer.getCurrentImage(), 350, 270);

private void drawImage(Graphics2D g2d, BufferedImage im, int x, int y) {


g2d.drawImage(im, x, y, this);
}
public static void main(String args[]) {
ImagesTest2 ttPanel = new ImagesTest2();
ttPanel.start();
JFrame app = new JFrame("Image Manager Test");
app.getContentPane().add(ttPanel, BorderLayout.CENTER);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.pack();
app.setResizable(false);
app.setVisible(true);
}
public void start() {
t.start();
}
public void run() {
while (Thread.currentThread() == t) {
try {
Thread.sleep(50);
} catch (Exception e) {
}
imagesUpdate();
repaint();
}
}

}
Methode :
public void sequenceEnded(String imageName)
public void paintComponent(Graphics g)
Object :
g2d.setColor(Color.blue);(mengatur warna)
g2d.fillRect(0, 0, PWIDTH, PHEIGHT);(fill pada Pwidht dan Pheihgt)

OutputPercobaan 5 : Membuat class ImagesTest2

Modul 7

ImageEfek :
package Rotasi_Transformasi;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
public class ImageEfek {
AffineTransform at;
private GraphicsConfiguration gc;
public ImageEfek(){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
}
public BufferedImage getRotatedImage(BufferedImage src, int angle){
int transparency = src.getColorModel().getTransparency();
int center= Math.max(src.getWidth(),src.getHeight())/2;
BufferedImage dest = gc.createCompatibleImage(
Math.max(src.getWidth(),src.getHeight()),Math.max(src.getWidth(),src.getHeight()), transparency );
Graphics2D g2d = dest.createGraphics();
AffineTransform origAT = g2d.getTransform();
AffineTransform rot = new AffineTransform();
rot.rotate( Math.toRadians(angle), center, center);
g2d.transform(rot);
g2d.drawImage(src, 0, 0, null);
g2d.setTransform(origAT);
g2d.dispose();
return dest;
}

public BufferedImage getScaledImage(BufferedImage src, double sx, double sy){


int transparency = src.getColorModel().getTransparency();
BufferedImage dest = gc.createCompatibleImage((int)Math.ceil(src.getWidth()*sx),
(int)Math.ceil(src.getHeight()*sy), transparency );
Graphics2D g2d = dest.createGraphics();
AffineTransform origAT = g2d.getTransform();
AffineTransform scale = new AffineTransform();
// scale.setTransform(identity);
scale.scale(sx, sy);
g2d.transform(scale);
g2d.drawImage(src, 0, 0, null);
// g2d.drawImage(src, scale, null);
g2d.setTransform(origAT);
g2d.dispose();
return dest;
}
public BufferedImage getTranslatedImage(BufferedImage src, int tx,int ty){
int transparency = src.getColorModel().getTransparency();
BufferedImage dest = gc.createCompatibleImage(src.getWidth(), src.getHeight(),transparency
);
Graphics2D g2d = dest.createGraphics();
AffineTransform origAT = g2d.getTransform();
AffineTransform trans = new AffineTransform();
trans.translate(tx, ty);
g2d.transform(trans);
g2d.drawImage(src, 0, 0, null);
g2d.setTransform(origAT);
g2d.dispose();
return dest;
}
public static void main(String[] args) {
new ImageEfek();
}
}

Out put dari ImageEfek : sucsesfull cs ini adalah class panggil

Modul 7
:
ContohRotasi

package Rotasi_Transformasi;
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class ContohRotasi extends JFrame implements Runnable {
Shape shape;
Thread t;
Random rand = new Random();
ContohRotasi (){
shape = new Rectangle2D.Double(10,40,100,50);
t=new Thread(this);
t.start();
setTitle("Percobaan Rotasi");
setSize(500,500);
setVisible(true);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public void paint (Graphics g){
Graphics2D g2d = (Graphics2D) g;
AffineTransform identitas = new AffineTransform();
g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0,500,500);
g2d.setTransform(identitas);

//Membuat garis bantu


g2d.setColor(Color.WHITE);
for(int i=0;i<500;i+=10){
g2d.drawLine(0, i, 500, i);
g2d.drawLine(i, 0, i, 500);
}
g2d.setColor(Color.BLUE);
g2d.fill(shape);
g2d.translate(200, 200);
for(int i=0;i<360;i++){
g2d.rotate(Math.toRadians(1));
g2d.setColor(new Color(rand.nextInt()));
try{
Thread.sleep(1);
} catch (InterruptedException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
g2d.fill(shape);
}
}
public void run(){
Thread current = Thread.currentThread();
while (current == t){
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
e.printStackTrace();
}
repaint();
}
}
public static void main (String args []){
new ContohRotasi();
}
}

Out put

Penjelasan :

Modul 7
:
Rotasi_Transformasi

package Rotasi_Transformasi;
import GrafikBitmap.ImageManager;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class TestTransformasi extends JPanel implements Runnable{
private Thread th;
private boolean running;
private BufferedImage bufImg;
private Graphics2D g2d;
private BufferedImage oriImg;
private BufferedImage transformImg;
private ImageManager imsMgr;
private ImageEfek imgEfek;
private double scalex=0, scaley=0;
private int rotAngle;
TestTransformasi(){
setPreferredSize (new Dimension(600, 400));
imgEfek = new ImageEfek();
imsMgr = new ImageManager();
imsMgr.setPath("jeniTransform/images");
imsMgr.loadSingleImage("maninhat.gif");
oriImg = imsMgr.getImage("maninhat");
}
public void start(){
th = new Thread(this);
th.start();
running = true;
}
public void stop(){
running=false;
}
public void run(){
while(running){
try{
Thread.sleep(20);
}catch(Exception e){}
update();
render();

repaint();

public void paintComponent (Graphics g){


g.drawImage(bufImg, 0, 0, null);
}
public void render(){
if(bufImg == null){
bufImg = (BufferedImage) createImage(600, 400);
if(bufImg == null){
System.out.println("dbImage null");
return;
}else
g2d = (Graphics2D) bufImg.getGraphics();
}
g2d.setColor(Color.gray);
g2d.fillRect(0, 0, getWidth(), getHeight());
transformImg = imgEfek.getScaledImage(oriImg, scalex, scaley);
transformImg = imgEfek.getRotatedImage(transformImg, rotAngle);
g2d.drawImage(transformImg, (600/2)-(transformImg.getWidth()/2), (400/2)(transformImg.getHeight()/2), null);
}
public void update(){
if(scalex<=2){
scalex+=0.01;
scaley+=0.01;}
//if(rotAngle<360)
rotAngle+=2;
}
public static void main (String [] args){
TestTransformasi ttPanel = new TestTransformasi();
ttPanel.start();

JFrame app = new JFrame("Transformasi");


app.getContentPane().add(ttPanel, BorderLayout.CENTER);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.pack();
app.setResizable(false);
app.setVisible(true);

Output

Penjelasan:
Program yang menampilkanm, perotarsian image orang , mutar2, dan juga menginput atau
manggil class ImageEfek.

KESIMPULAN
Di modul 6 dan 7 membuktikan bahwa adanya gambar dan rotasi pergerakan, fungsi
transparansi ada pada program java dan modul 7 juga membuktikan adanya outputan gambar
pada java , sehingga kedua outputan tersebut bias d aplikasikan pada game , sehingga ada
gambar yang bergerak dan berotasi.
curhat di kelas Cuma bahas grennfoot tp di gak, beda jauh :D.

Anda mungkin juga menyukai