Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

int Farben aus Frame ermitteln

Empfohlene Antworten

Veröffentlicht

Hallo liebe Community,

ich hab ein kleines Problem.

Ich hab ein Frame mit einem Bild und ich würde gerne über das Bild iterativ rüberlaufen und für jeden Pixel die Farbe bestimmen.

Dabei ist es wichtig, dass ich kein Color Objekt bekomme, sondern den int wert der Farbe.

Ich weiß, dass es ein Pixelgrabber Objekt gibt der genau das macht. Aber da ich neben der int Farbe weitere Informationen beim rüberlaufen der Pixel speichern will, hilft mir das Objekt in diesem Fall nicht.

Ich finde auch keine passende Methode in der Frame Klasse.

Hoffe einer kennt eine Möglichkeit ;-)

Hier mal eine kleine Auswahl, wie man das bewerkstelligen könnte:


public static void main(String[] args) throws IOException {


	final int x = 123;

	final int y = 123;

	final BufferedImage image = ImageIO.read(new File("myFile.jpg"));

	System.out.println("RGB " + image.getRGB(x, y));


	final Raster raster = image.getData();

	System.out.println(raster.getSample(x, y, 0)); // channel/bank/band 0 (z.B. R)

	System.out.println(raster.getSample(x, y, 1)); // channel/bank/band 1 (z.B. G)

	System.out.println(raster.getSample(x, y, 2)); // channel/bank/band 2 (z.B. 


	final DataBuffer buffer = raster.getDataBuffer();

	final SampleModel sampleModel = raster.getSampleModel();

	sampleModel.getSample(x, y, 0, buffer); // channel/bank/band 0 (z.B. R)

	sampleModel.getSample(x, y, 1, buffer); // channel/bank/band 1 (z.B. G)

	sampleModel.getSample(x, y, 2, buffer); // channel/bank/band 2 (z.B. 


	final int offset = ?(x, y); // hierfür benötigt man genaue Kenntnisse über die interne Repräsentation

	buffer.getElem(0, offset); // channel/bank/band 0 (z.B. R)

	buffer.getElem(1, offset); // channel/bank/band 1 (z.B. G)

	buffer.getElem(2, offset); // channel/bank/band 2 (z.B. 


}

[/code]

Die oberste Möglichkeit ist die, die du angefragt hattest. Je nachdem wie viele und welche Daten man benötigt, sind die anderen Methoden ggf. besser geeignet. Die unteren Lösungen sind i.A. schneller als die oberen - dafür halt nicht so komfortabel.

Ein Blick in die Javadocs der von mir verwendeten Klassen/Schnittstellen lohnt sich - das ist eine wahre Fundgrube.

Bei konkreten Fragen helfe ich natürlich gerne weiter.

hey,

danke für die Möglichkeiten. Ich hab es noch nicht ausprobiert, scheint aber in sich logisch zu sein.

Also erstmal danke für deine Mühe. Falls ich noch probleme habe, melde ich mich nochmal

Bearbeitet von Silizium185

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.