/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Klikke et område ud af at billede
Fra : Jonas Swiatek


Dato : 12-02-01 19:16

Hey there...

Kan man lave baggrunden på et Canvas gennemsigtig? som standart er den jo
bare grå. - så man kan se hvad der er under Canvaset...
Jeg har prøvet med setBackground(Color.Opaque), men den kan ikke
kompilerer...

Hvis man ikke kan dette, tænkte jeg, at man måske kunne klippe det område af
baggrunden ud af en gif-fil, som canvaset dækker. Og så sætte det som
baggrund.

Men hvordan, hvis jeg har en .gif-fil på 500x500 pxl, og godt vil ha et nyt
Image, som starter på punktet 35,35 og er 200,200 langt og højt. Er kan ikke
lave et eller andet smart med en funktion i Image-klassen. Hvor man klipper
dette område ud af billedet.
Jeg har tjekken JavaDoc'en, men uden held.

Alt dette forgår i en Applet

--
Jonas



 
 
Rene Hangstrup Moell~ (13-02-2001)
Kommentar
Fra : Rene Hangstrup Moell~


Dato : 13-02-01 11:50

On Mon, 12 Feb 2001, Jonas Swiatek wrote:

> Kan man lave baggrunden på et Canvas gennemsigtig?

Hvis du extender Component istedet for Canvas, skulle du kunne lave
et gennemsigtigt awt-komponent. (Kraever dog minimum java 1.1)

> Er kan ikke lave et eller andet smart med en funktion i Image-klassen.
> Hvor man klipper dette område ud af billedet.

Jo, til det formaal kan du bruge java.awt.image.CropImageFilter. Den er
ogsaa genial til at klippe enkelte figurer ud af et imagestrip, og den
virker med transparente gifs.

I dit tilfælde kan du dog også øjes med et simpelt lille trick.
Du skal blot tegne billedet forskudt i forhold til din komponent. Hvis du
ønsker området med øverste venstre hjørne på (50,40) kan du gøre
sådan her:

public void paint(Graphics g) {
g.drawImage(background, -50, -40, this);
}

Haaber det ka' bruges. Hvis du skal se noget sovs kan du bare sige til.

Rene Hangstrup Møller
rhmoller@webcafe.dk



Jonas Swiatek (13-02-2001)
Kommentar
Fra : Jonas Swiatek


Dato : 13-02-01 16:36

> Hvis du extender Component istedet for Canvas, skulle du kunne lave
> et gennemsigtigt awt-komponent. (Kraever dog minimum java 1.1)

Mmm, hvis jeg extender Component frem for Canvas, tegner den ingen ting...
Jeg kan ikke se grafiken, hvis man kan sige det sådan...
Skal man painte på en anden måde, hvis man extender Component ?

En anden ting er, normalt når jeg tegner animaret grafik, laver jeg et
Graphics-objekt, og kalder createImage i det. Og laver en [Image.objekt] =
[grahpics-objekt].getGraphics(); i INIT. Og så tegner jeg al grafik på
dette, og afslutter min paint-metode med at tegne Image-instansen.

Dette virker fint med Applet, men ikke med Canvas ? - jeg får en NullPointer
Exception, koden følger......

import java.awt.*;
import java.awt.event.*;

class Player extends Canvas implements Runnable {
Image gfx;
Image background;
Image scene;

Graphics bg;
Thread thread;

public final int width=50;
public final int height=50;

public Player(int x, int y, Image img, Image backgrnd) {
setBounds(x, y, width, height);
setVisible(true);
addKeyListener(this);

thread = new Thread(this);

gfx = img;
background = backgrnd;

scene = createImage(getSize().width, getSize().height);
bg = scene.getGraphics();
}

public void paint(Graphics g) {
bg.drawImage(background, 0 - getBounds().x, 0 - getBounds().y,
this);
bg.drawImage(gfx, 0, 0, this);
g.drawImage(scene,0,0,this);
}

public void update(Graphics screen) {
paint(screen);
}
public void run() {
while(true) {
repaint();

try {
thread.sleep(50);
}
catch(Exception e) {}
}
}
}

--
Jonas



Rene Hangstrup Moell~ (14-02-2001)
Kommentar
Fra : Rene Hangstrup Moell~


Dato : 14-02-01 19:01

On Tue, 13 Feb 2001, Jonas Swiatek wrote:

> Mmm, hvis jeg extender Component frem for Canvas, tegner den ingen ting...
> Jeg kan ikke se grafiken, hvis man kan sige det sådan...
> Skal man painte på en anden måde, hvis man extender Component ?

Her er et lille eksempel. Det består af en applet med sort baggrund.
Jeg tilføjer en standard Button og et TransparentComponent (arver fra
Component), som består af en gul ellipse. Applet'ens sorte baggrund kan
ses igennem TransparentComponent, der hvor den gule ellipse ikke er.

--- SNIP ---

import java.applet.*;
import java.awt.*;

public class Player2 extends Applet {

public void init() {

   setLayout(new BorderLayout());
   TransparentComponent comp = new TransparentComponent();
   add(BorderLayout.CENTER, comp);

   add(BorderLayout.NORTH, new Button("Test"));
   //repaint();
}

public void paint(Graphics g) {
   Rectangle bounds = getBounds();
   g.setColor(Color.black);
   g.fillRect(0, 0, bounds.width, bounds.height);
   super.paint(g);
}
}

class TransparentComponent extends Component {
public void paint(Graphics g) {
   System.out.println("Paint");
   Rectangle bounds = getBounds();
   g.setColor(Color.yellow);
   g.fillOval(0,0,bounds.width, bounds.height);
}
}

--- SNIP ---

> En anden ting er, normalt når jeg tegner animaret grafik, laver jeg et
> Graphics-objekt, og kalder createImage i det.

Jeg håber du mente det modsatte.

Image backImage = createImage(width, height);
Graphics backGfx = backImage.getGraphics();

Se evt:
http://webcafe.dk/java/artikler/103/ja103.php3

(Ja, jeg ved godt at mine java artikler er efterladt i en miserabel
tilstand. Men en skønne dag skal jeg nok få dem opdateret... en skønne
dag....)

---
Rene Hangstrup Møller || http://WebCafe.dk - Dansk side om webdesign.



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste