为单个像素着色
Coloring Individual Pixels
我正在尝试用 Java 编写一个程序,它通过将每个 RGB 通道的值加一直到达到 255,然后在下一个 RGB 通道。
举个例子:
RED 设置为 0
绿色设置为 0
蓝色设置为 0
RED 在第一个像素上加一个 (RED++) 直到达到 255。
RED 达到 255 后,RED 设置为 0,GREEN 加一 (GREEN ++)。
RED 通道像步骤 1 一样再次累加,直到 255,然后再次执行步骤 2。
如果 GREEN 为 255,则对 BLUE 使用相同的方法意味着将一个添加到 BLUE,而 GREEN 和 RED 将再次设置为 0。然后再次执行步骤1。
在第一个像素中的所有通道都为 255 之后,第二个像素在其红色通道上得到一个。然后它应该再次从第 1 步开始,直到第二个像素在红色上的值为 255,这会将红色设置回 0 并且绿色在第二个像素上得到一个,依此类推....
很抱歉我的英语不好,而且我的 Java 知识有限。
这是我到目前为止的全部代码(注释中的内容在项目中不再重要,还没有准备好使用或者我不明白如何使用它 xD):
import javax.swing.JFrame;
//import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
//import java.awt.image.BufferedImage;
public class Quadrat
{
public static void main (String[] args)
{ int x = 100;
int y = 0;
int z = 0;
int Max = 255;
int height = 500;
int width = 500;
if (x < Max){
x ++;
} else {
x = 0;
y ++;
}
if (y > Max){
y = 0;
z ++;
}
if (z > Max){
z = 0;
}
JFrame Bild = new JFrame("Bildergenerator");
Bild.setSize(width,height);
Bild.setVisible(true);
Color Kartoffel = new Color(x, y, z, 255);
BufferedImage Test = new BufferedImage(300, 200,
BufferedImage.TYPE_INT_ARGB);
Graphics graphics = Test.getGraphics();
graphics.setColor(Kartoffel);
graphics.fillRect(100, 100, 100, 100);
graphics.dispose();
Test.setRGB(1, 1, Kartoffel.getRGB());
}
/*System.out.println(x);
System.out.println(y);
System.out.println(z);*/
//img.setRGB(x,y,z);
/* JFrame Test = new JFrame("Jframe1");
JLabel Label = new JLabel("");
Test.add(Label);
Test.setSize(xx,yy);
Test.setVisible(true);
Test.setLocation(x/2-(xx/2), y/2-(yy/2));*/
/* JFrame Hyaeaeae = new JFrame("BurrScurrSWAG");
Hyaeaeae.setSize(1000,1000);
Hyaeaeae.setVisible(true);
Hyaeaeae.getContentPane().setBackground( Color.RED);*/
}
我希望你能以任何方式帮助我,如果是这样,我非常感谢!
感谢您的关注!
祝你今天过得愉快! c:
您需要为此创建计时器,因为您的代码只是在启动时的第一次迭代中更改,此后没有任何更改,因此计时器可确保增量继续应用于变量
package javatestapp;
import java.awt.Color;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
public class JavaTestApp extends TimerTask
{
static int x = 100;
static int y = 0;
static int z = 0;
static int Max = 255;
static int height = 500;
static int width = 500;
static JFrame frame;
public static void main(String[] args)
{
InitFrame();
}
public static void incrementValues()
{
if (x < Max)
{
x ++;
}
else
{
x = 0;
y ++;
}
if (y > Max)
{
y = 0;
z ++;
}
if (z > Max)
{
x = 0;
y = 0;
z = 0;
}
}
public static void genImage()
{
Color color = new Color(x,y,z,255);
frame.getContentPane().setBackground(color);
}
public static void InitFrame()
{
frame = new JFrame("Bildergenerator");
frame.setSize(width,height);
frame.setVisible(true);
Timer timer = new Timer(true);
TimerTask timerTask = new JavaTestApp();
timer.scheduleAtFixedRate(timerTask, 0, 10);
}
@Override
public void run()
{
incrementValues();
genImage();
}
}
我正在尝试用 Java 编写一个程序,它通过将每个 RGB 通道的值加一直到达到 255,然后在下一个 RGB 通道。
举个例子:
RED 设置为 0 绿色设置为 0 蓝色设置为 0
RED 在第一个像素上加一个 (RED++) 直到达到 255。
RED 达到 255 后,RED 设置为 0,GREEN 加一 (GREEN ++)。
RED 通道像步骤 1 一样再次累加,直到 255,然后再次执行步骤 2。
如果 GREEN 为 255,则对 BLUE 使用相同的方法意味着将一个添加到 BLUE,而 GREEN 和 RED 将再次设置为 0。然后再次执行步骤1。
在第一个像素中的所有通道都为 255 之后,第二个像素在其红色通道上得到一个。然后它应该再次从第 1 步开始,直到第二个像素在红色上的值为 255,这会将红色设置回 0 并且绿色在第二个像素上得到一个,依此类推....
很抱歉我的英语不好,而且我的 Java 知识有限。
这是我到目前为止的全部代码(注释中的内容在项目中不再重要,还没有准备好使用或者我不明白如何使用它 xD):
import javax.swing.JFrame;
//import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
//import java.awt.image.BufferedImage;
public class Quadrat
{
public static void main (String[] args)
{ int x = 100;
int y = 0;
int z = 0;
int Max = 255;
int height = 500;
int width = 500;
if (x < Max){
x ++;
} else {
x = 0;
y ++;
}
if (y > Max){
y = 0;
z ++;
}
if (z > Max){
z = 0;
}
JFrame Bild = new JFrame("Bildergenerator");
Bild.setSize(width,height);
Bild.setVisible(true);
Color Kartoffel = new Color(x, y, z, 255);
BufferedImage Test = new BufferedImage(300, 200,
BufferedImage.TYPE_INT_ARGB);
Graphics graphics = Test.getGraphics();
graphics.setColor(Kartoffel);
graphics.fillRect(100, 100, 100, 100);
graphics.dispose();
Test.setRGB(1, 1, Kartoffel.getRGB());
}
/*System.out.println(x);
System.out.println(y);
System.out.println(z);*/
//img.setRGB(x,y,z);
/* JFrame Test = new JFrame("Jframe1");
JLabel Label = new JLabel("");
Test.add(Label);
Test.setSize(xx,yy);
Test.setVisible(true);
Test.setLocation(x/2-(xx/2), y/2-(yy/2));*/
/* JFrame Hyaeaeae = new JFrame("BurrScurrSWAG");
Hyaeaeae.setSize(1000,1000);
Hyaeaeae.setVisible(true);
Hyaeaeae.getContentPane().setBackground( Color.RED);*/
}
我希望你能以任何方式帮助我,如果是这样,我非常感谢! 感谢您的关注! 祝你今天过得愉快! c:
您需要为此创建计时器,因为您的代码只是在启动时的第一次迭代中更改,此后没有任何更改,因此计时器可确保增量继续应用于变量
package javatestapp;
import java.awt.Color;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
public class JavaTestApp extends TimerTask
{
static int x = 100;
static int y = 0;
static int z = 0;
static int Max = 255;
static int height = 500;
static int width = 500;
static JFrame frame;
public static void main(String[] args)
{
InitFrame();
}
public static void incrementValues()
{
if (x < Max)
{
x ++;
}
else
{
x = 0;
y ++;
}
if (y > Max)
{
y = 0;
z ++;
}
if (z > Max)
{
x = 0;
y = 0;
z = 0;
}
}
public static void genImage()
{
Color color = new Color(x,y,z,255);
frame.getContentPane().setBackground(color);
}
public static void InitFrame()
{
frame = new JFrame("Bildergenerator");
frame.setSize(width,height);
frame.setVisible(true);
Timer timer = new Timer(true);
TimerTask timerTask = new JavaTestApp();
timer.scheduleAtFixedRate(timerTask, 0, 10);
}
@Override
public void run()
{
incrementValues();
genImage();
}
}