NiehlsMedlem sedan juli 2002131 inlägg 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
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());
NiehlsMedlem sedan juli 2002131 inlägg 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
NiehlsMedlem sedan juli 2002131 inlägg 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.
Om du sätter in tex Color.RED.getRGB() blir det rött då?
NiehlsMedlem sedan juli 2002131 inlägg 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
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);
}
}
NiehlsMedlem sedan juli 2002131 inlägg 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)
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();
}
ViktorMedlem sedan aug. 20021 752 inlägg Tråd flyttad från "Java 2 Enterprise Edition"
/Viktor
NiehlsMedlem sedan juli 2002131 inlägg yes yes. tackar. nu funkar det finfint.. Resultatet finns att beskåda på här om ngn är intresserad.
ViktorMedlem sedan aug. 20021 752 inlägg Glöm inte att markera det svar som löste din fråga, klicka på "Acceptera som slutgiltigt svar" vid det inlägget :)
/Viktor