【问题标题】:Coloring Individual Pixels为单个像素着色
【发布时间】:2018-02-28 00:08:57
【问题描述】:

我正在尝试使用 Java 编写一个程序,该程序通过将每个 RGB 通道的值加一直到达到 255,然后在下一个 RGB 通道上加一,用 RGB 为单个像素着色来生成图像。

这里是一个例子:

RED 设置为 0 绿色设置为 0 蓝色设置为 0

  1. RED 在第一个像素上加一个 (RED ++),直到达到 255。

  2. RED 达到 255 后,RED 设置为 0,GREEN 加一(GREEN ++)。

  3. RED 通道再次像第 1 步一样累加,直到 255,然后再次执行第 2 步。

  4. 如果 GREEN 为 255,则对 BLUE 使用相同的方法意味着将一个添加到 BLUE,而 GREEN 和 RED 将再次设置为 0。然后再次执行第 1 步。

  5. 在第一个像素中的所有通道都为 255 后,第二个像素在其 RED 通道上上升一个。然后它应该再次从第 1 步开始,直到第二个像素在 RED 上的值为 255,什么会将 RED 设置回 0 并且 GREEN 在第二个像素上得到一个等等......

我很抱歉我的英语不好和我有限的 Java 知识。

到目前为止,这是我的全部代码(cmets 中的东西在项目中不再重要,没有准备好使用或者我不明白如何使用它 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:

【问题讨论】:

  • 嗨。您期望拥有什么?如果你用 255 的三种颜色填充第一个像素!继续!你有图片要给我们看吗?
  • 好的,你已经描述了你的程序应该做什么,并且你发布了一些代码。但看起来你忘了问一个具体的问题——你的问题到底是什么?该程序是按照您的预期做的,还是做一些不同的事情?

标签: java colors rgb pixels


【解决方案1】:

您需要为此创建计时器,因为您的代码只是在启动时的第一次迭代中更改,之后没有任何更改,因此计时器确保增量继续应用于变量

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();
    }
}

【讨论】:

  • 感谢您的快速帮助,但我认为出了点问题......线程“main”中的异常 java.lang.Error:未解决的编译问题:在 JavaTestApp.main(JavaTestApp.java:18 )
  • 我发现了问题!它是“package javatestapp;”
  • 重命名你正在使用的包,让我进一步了解
  • 我刚刚从代码中取出它,它工作得非常好。很抱歉很久没有答案:D
  • 我没有足够的声望来显示我的投票,但它仍然很重要!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2013-10-04
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多