webForumDet fria alternativet

java: BufferedImage.setRGB()

Java

11 svar · 535 visningar · startad av Niehls

Medlem sedan juli 2002131 inlägg
Frågan#1

Hoppas jag hamnade i rätt forum nu. I vilket fall så undrar jag om någon här har erfarenhet av setRGB-metoden. problemet är att den tar tre värden som parametrar
setRGB(int x, int y, int rgb). Vad jag har är en matris med rgb-värden för alla pixlar (rgb-tripletter) och jag har slitit håret av mig med att försöka omvandla dessa värden till en int som man kan skicka till setRGB. Antar att den vill ha färgen i hex, men jag är inte sådär super på basomvandlingar. Undrar om någon här skulle kunna hjälpa mig med detta.

edit: hoppsan. såg nu att det fanns ett java-forum som jag inte hittat tidigare. *ber om förflyttning

Medlem sedan juni 2003372 inlägg
#2

Tror nog att du ska kunna använda Color för att omvandla, den har konstruktor som tar rgb var för sig och har sen metoden getRGB();

img.setRGB(x,y,new Color(r,g,b).getRGB());
Medlem sedan juli 2002131 inlägg
#3

haha.. tack min älskling. satt i bakfylleångest hela dagen igår och blev till slut förtvivlad.. försökte med alla slags konverteringar jag kunde komma på och hittade.
återigen, man tackar

Medlem sedan juli 2002131 inlägg
#4

nu har jag däremot en annan fråga. Vad för slags färg är det jag får om jag använder det? Färgerna som genereras är avsevärt olik de som man får om man stoppar in värdena i t.ex. photoshop.

Medlem sedan juni 2003372 inlägg
#5

Om du sätter in tex Color.RED.getRGB() blir det rött då?

Medlem sedan juli 2002131 inlägg
#6

haha, nope.. lila
(0,0,0) blir blågrönt
(255,255,255) blir någon slags bisarr blandning av hudfärg och orange.
skumt

Medlem sedan juni 2003372 inlägg
#7

Okej, visa lite kod så är det lättare att se vad som är fel.

har knackat ihop ett litet exempel som ritar rött.. iaf på min dator ;)

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JPanel
{
	BufferedImage bi;

	public Test()
	{
		bi = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
	}

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);

		int tmp = this.getWidth() % 300;
		for (int i = 0; i < tmp; i++)
		{
			for (int k = 0; k < tmp; k++)
				bi.setRGB(i, k, Color.RED.getRGB());
		}

		g.drawImage(bi, 0, 0, null);
	}

	public static void main(String[] args)
	{
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.getContentPane().add(new Test());
		f.setSize(300, 300);
		f.setVisible(true);
	}
}
Medlem sedan juli 2002131 inlägg
#8

Följande är en method i en klass (för att beräkna mandelbrot-fraktaler)
mandelbrotSet[y][x] innehåller rgb-värden.
Det som står nedan typ:
rgb[0] = 6*mandelbrotSet[y][x] är bara en temporär fullösning.

    public void writeToFile(int[][] mandelbrotSet, String file) {
	int[] rgb = new int[3];
	BufferedImage image = new BufferedImage(mandelbrotSet.length, mandelbrotSet[0].length, BufferedImage.TYPE_INT_ARGB);
    	for(int y = 0; y < mandelbrotSet.length; y++) {
	    for(int x = 0; x < mandelbrotSet[y].length; x++) {
		rgb[0] = 6*mandelbrotSet[y][x];
		rgb[1] = mandelbrotSet[y][x];
		rgb[2] = 3*mandelbrotSet[y][x];
		image.setRGB(y,x,new Color(rgb[0],rgb[1],rgb[2]).getRGB());

		
	    }
	}
	try {
	    ImageIO.write(image, "jpeg", new File(file));
	} catch(IOException e) {
	    System.out.println("file could not be accessed");
	}
    }

det verkar ju som om det skulle vara när jag skriver filen som det blir fel (ditt exempel är rött även för mig)

Medlem sedan juni 2003372 inlägg
#9

Denna koden skriven en röd bild.
Använd typen TYPE_INT_RGB när du skriver till fil så ska det fungera bra.

BufferedImage bi = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
int tmp = 300;

for (int i = 0; i < tmp; i++)
{
	for (int k = 0; k < tmp; k++)
		bi.setRGB(i, k, Color.RED.getRGB());
}

try
{
	ImageIO.write(bi, "jpg", new File("./out.jpg"));
}
catch (Exception e)
{
	e.printStackTrace();
}
Medlem sedan aug. 20021 752 inlägg
#10

Tråd flyttad från "Java 2 Enterprise Edition"

/Viktor

Medlem sedan juli 2002131 inlägg
#11

yes yes. tackar. nu funkar det finfint.. Resultatet finns att beskåda på här om ngn är intresserad.

Medlem sedan aug. 20021 752 inlägg
#12

Glöm inte att markera det svar som löste din fråga, klicka på "Acceptera som slutgiltigt svar" vid det inlägget :)

/Viktor

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)