Wie zu verwenden ImageObserver in der Graphics-Methode drawImage()
Die Methode, die ich versuche zu verwenden ist:
drawImage(image, int, int, int, int, ImageObserver) - Methode
so dass ich skalieren kann mein Bild, auf alle die Beispiele, die ich gesehen habe, der ImageObserver werden sollte, aber dieser scheint nicht zu funktionieren(d.h. die einzigen Methoden, die ich gesehen habe ist:
drawImage(image, int, int, ImageObserver), weiß nicht, ob das einen Unterschied macht).
Hier ist meine main-Klasse, die das applet:
import java.applet.*;
import java.awt.*;
public class Main extends Applet implements Runnable{
private Thread th;
private Hitter hitter;
//double buffering
private Graphics dbg;
private Image dbImage;
public void init(){
hitter = new Hitter(getImage(getCodeBase(), "Chitter.png"));
}
public void start(){
th = new Thread(this);
th.start();
}
public void stop(){
th.stop();
}
public void update(Graphics g){
if(dbImage == null){
dbImage = createImage(this.getSize().width, this.getSize().width);
dbg = dbImage.getGraphics();
}
dbg.setColor(getBackground());
dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
dbg.setColor(getForeground());
paint(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paint(Graphics g){
hitter.drawHitter(g);
}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while(true){
repaint();
try{
Thread.sleep(15);
}catch(InterruptedException ex){}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public boolean mouseMove(Event e, int x, int y){
hitter.move(x);
return true;
}
}
Hier ist der Hitter Klasse:
import java.awt.*;
import java.awt.image.ImageObserver;
public class Hitter{
private int x, y;
private Image hitter;
private int hitterWidth = 50, hitterHeight = 10;
private int appletsizeX = 500, appletsizeY = 500;
Hitter(Image i){
hitter = i;
start();
}
public void drawHitter(Graphics g){
g.drawImage(hitter, x, y, hitterWidth, hitterHeight, this);
}
public void move(int a){
x = a;
}
public void start(){
x = appletsizeX/2 - hitterWidth/2;
y = 0;
}
}
- Ihre Frage ist zu vage. Poste bitte code, der das problem veranschaulicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sei denn, die Klasse, in die Sie aufrufen
Grafik.drawImage(Image, int, int, int, int, ImageObserver)
ist einImageObserver
, mitthis
als argument für dieImageObserver
wird nicht funktionieren:Wenn Sie die Größenänderung eines Bildes, die nicht erfordern eine
ImageObserver
(wie einBufferedImage
schon enthält das Bild, das Sie ändern möchten), dann können Sie einfach mit der hand über einenull
:Sagte, ich werde werfen Sie in einem kleinen Stecker für mein Bild Größenänderung Bibliothek Thumbnailator.
Wenn alles, was erforderlich ist, um die Größe eines Bildes ändern, es vollendet werden kann, wie einfach, wie der folgende code:
Thumbnailator ist flexibel genug, um anzunehmen
BufferedImage
sFile
s, undInputStream
s als Eingabe.Sehen Sie Ihre Bearbeiten, würde ich vorschlagen, ändern die
Hitter
Klasse, so dass es führt die Größenänderung des Bildes in den Konstruktor.Da Sie den Aufruf der
drawHitter
Methode bei jedem Aufruf aus derApplet.drawImage
, das resize-operation mitGraphics.drawImage
genannt wird, viele Male, auch wenn derhitterWidth
undhitterHeight
sind, für alle Absichten und Zwecke, Konstanten.Größe des
Image
vor der Zeit, und die Zeichnung, die vor-verkleinerte Bild in derdrawHitter
Methode wird effizienter.