[Java] Methode getRGB() niet in java.awt.Image

Pagina: 1
Acties:

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Ik gebruik de volgende code om de kleur een pixel op te vragen van een figuur:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.applet.Applet;
import java.awt.*;
import java.awt.image.ColorModel;

public class Blok extends Applet
{
  Image image1;

  public void init()
  {
    image1 = getImage(getCodeBase(), "logo.gif");
  }

  public void paint(Graphics g)
  {
    Color c = new Color(image1.getRGB(100, 100));
    int red = c.getRed();
    int green = c.getGreen();
    int blue = c.getBlue();

    g.drawString(String.valueOf(red), 10, 10);
    g.drawString(String.valueOf(green), 10, 20);
    g.drawString(String.valueOf(blue), 10, 30);
  }
}


Als ik dit compile geeft hij de volgende fout:

Method getRGB(100, 100) not found in class java.awt.Image

Hij zit ook in java.awt.image.ColorModel, maar toch geeft hij deze fout.

Iemand ideeen?

Verwijderd

Dat kan wel kloppen, Image is een Subclass van object en heeft zelf maar een paar methods. Als je even in de apidocs op index klikt, dan op G dan krijg je fijn een lijst met alles met de letter G en dan zoek je naar getRGB(int,int) en dan zie je dat die in BufferedImage zit, en dan klik je daarop en dan is dat nog een Subclass van Image ook, wat weer fijn is want dan kun je dus gewoon Image vervangen door BufferedImage.

Wat je met die ColorModel in je verhaal probeert te zeggen snap ik niet, want die import je alleen en het boeit dus weinig dat ColorModel een method getRGB(int) heeft en daar staat (int) in het vet omdat ik daarmee probeer aan te geven dat die maar 1 attribuut heeft en dus niet hetzelfde is als getRGB(100,100).

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
* Fles is beginner in Java, d8 dat hij ColorModel nodig zou hebben :P

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Dat is geinig, ik kan heel getRGB(int,int) niet vinden en Image is geen subclass van object maar van awt :s
BufferedImage kan ik al helemaal niet vinden bij de packages. Ook niet als subclass van Image.
Image vervangen door BufferedImage werkt al helemaal niet :(

Bedankt voor de vlotte uitleg, maar ik snap er geen flikker van...

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Het probleem is nu:

welke package heb ik nodig om een variabele van het type BufferedImage te declareren?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.applet.Applet;
import java.awt.*;

public class Blok extends Applet
{
  Image sourceImage;
  BufferedImage buffedImage;

  public BufferedImage toBufferedImage(Image img)
  {
    BufferedImage bimg = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
    bimg.getGraphics().drawImage(img,0,0,null);
    return bimg;
  }

  public void init()
  {
    sourceImage = getImage(getCodeBase(), "logo.gif");
  }

  public void paint(Graphics g)
  {
    buffedImage = toBufferedImage(sourceImage);

    Color c = new Color(buffedImage.getRGB(100, 100));
    int red = c.getRed();
    int green = c.getGreen();
    int blue = c.getBlue();

    g.drawString(String.valueOf(red), 10, 10);
    g.drawString(String.valueOf(green), 10, 20);
    g.drawString(String.valueOf(blue), 10, 30);
  }
}


dit, wat ik denk dat hem moet zijn, is hem niet:
import java.awt.image.BufferedImage;

Als ik dat doe kan hij hem niet vinden in import :?

[ Voor 0% gewijzigd door Fles op 09-09-2002 19:56 . Reden: ff iets bij gezet ]


Verwijderd

Het moet gewoon java.awt.image zijn. Probeer anders eens import java.awt.image.*;

Hier staat een uitleg over het gebruik van een buffered image. En er is ook nog een overview van de klasse.

Als helemaal niets lukt dan heb je de jdk mischien niet goed geinstalleerd.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Graveheart schreef op 09 september 2002 @ 19:25:
Dat is geinig, ik kan heel getRGB(int,int) niet vinden en Image is geen subclass van object maar van awt :s
java.awt.Image wil niet zeggen dat Image een subclass is van awt. awt is de package waar Image in zit, wat helemaal niets met subclasses te maken heeft. Een package is een manier om classes hïerarcisch in te delen.

Kijk even naar de docs, ik neem als voorbeeld even Image:

http://java.sun.com/j2se/1.4/docs/api/java/awt/Image.html

De eerste vette letters die we zien zijn: Class Image.
Boven de naam van de class staat in kleinere letters de package van die class. Dat is wat jij in je import statement neerzet om die classe te kunnen gebruiken.

Onder de naam van de class zie je een heel klein boompje. Bovenaan zie je java.util.Object staan en daar net onder (en iets naar links) java.awt.Image. Deze boom stelt een soort stamboom voor en betekend dat Image overerft van Object ( alles erft van Object af uitendelijk )

Onder de boom staat het volgende: Direct Known Subclasses
Dit betekend dat de volgende classes (met link!) subclasses zijn van de huidige class (Image in ons geval).

Daarna volgt een korte uitleg over de class. Alle protected en public fieldnames, de constructoren en alle methoden :) Die zoek je zelf maar ff uit.

Tot hier de cursus Java API lezen voor dummy's :)

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Verwijderd schreef op 09 september 2002 @ 21:31:
Het moet gewoon java.awt.image zijn. Probeer anders eens import java.awt.image.*;
Class BufferedImage not found in type declaration.

Das de fout die hij geeft als ik een variabele probeer te maken van het type BufferedImage

java.awt.Image en java.awt.image.* zijn geinclude.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Welke jdk versie gebruik je? (Want hij moet er echt inzitten).

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Ik gebruik versie 1.1.8
Ik ben nu sdk 1.4 aan het downloaden misschien dat dat helpt?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

zoals je ziet zit hij er gewoon in bij nieuwere versies.

http://java.sun.com/j2se/.../image/BufferedImage.html

probeer eens de volgende regel aan je imports toe te voegen:

import java.awt.image.BufferedImage;

hiermee kan je dus 1 specifieke class importeren.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je moet er wel rekening mee houden dat als dit een applet gaat worden, dat je problemen gaat krijgen als jij in een nieuwe jdk gaat werken. De meeste mensen hebben nog de achterhaalde 1.1.8 en niet de veel modernere 1.4(.1)

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Ik heb
import java.awt.image.BufferedImage;
al geprobeerd en dat deed hij niet, hij kon BufferedImage dan niet vinden.

Met de nieuwe sdk 1.4 doet hij het wel :p

Toch een foutje bij jdk 1.1.8

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Niet zozeer een foutje, maar dan zat BufferedImage gewoon daar nog niet in. Hebben ze die vanaf 1.2 toegevoegd. (Helaas staat er op de documentatie niet bij wanneer deze class is toegevoegd.. wel een beetje |:( )

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Eerder had ik bij sdk 1.4 aangezet dat hij applets met sdk moest bekijken in IE. Dan zette hij die applets in de cache en dat wilde ik niet, toen heb ik dat uitgezet, maar nu kan hij ze helemaal niet meer openen. Tenminste, ik krijg alleen een grijs veld. Kan dat komen omdat ik een nieuwe versie heb, versie 1.4 dus?

Verwijderd

hoe ziet je htmlfile er uit?

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Precies hetzelfde als eerst, toen deed hij het wel

<body>
<applet code='Blok.class' width='200' height='200'>
</body>

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Nu vat ik er helemaal niets meer van.
Met sdk 1.4 deed hij helemaal niets, zelfs het eenvoudigste niet: een string laten zien in beeld.
Met jdk 1.1.8 deed hij alles, maar daar zat die package niet in.
Nu heb ik sdk 1.2.2 en nu doet hij het eenvoudige wel, maar als het wat ingewikkelder wordt doet hij het niet!

Ik weet wel dat ik nog nooit zo'n geklooi heb gehad met een ontwikkelongeving...

code:
1
2
3
4
5
6
  public BufferedImage toBufferedImage(Image img)
  {
    BufferedImage bimg = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
    bimg.getGraphics().drawImage(img,0,0,null);
    return bimg;
  }


Het gaat om deze functie. Zodra ik die uitvoer doet hij het niet meer.
Pagina: 1