2016-10-17 5 views
0

그래서 나는 약간의 문제가 있으며 시간이 지나도 그것을 풀려고 노력한다. BufferedImage가 있고 유창한 방식으로 색상을 변경하고 싶습니다. f.e. 빨간색에서 흰색으로. 내 주요 :Javafx/AWT없이 색상 그라디언트를 만드는 방법은 무엇입니까?

static int color12(int x, int y) {  
    int size = 100; 
    if (Math.abs(width/2 - x) < size/2 && Math.abs(height/2 - y) < size/2) 
     return new Color(255, 0, 0).getRGB(); 
    else 
     return new Color(200, 200, 255).getRGB(); 
} 

}

그래서 내가 방법으로 주위를 연주,하지만 난 그것을 완수하지 못할 :

public static void main(String[] args) { 
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

    for (int x = 0; x != width; x++) { 
     for (int y = 0; y != height; y++) { 
      image.setRGB(x, y, color12(x, y)); 



    try { 
     ,,, 

내 방법은 색상을 변경합니다. (R, G, B) .getRGB()

int r = 0 ;  
    int b = 0; 
    int g = 0; 
    for (int i = 1; i < 255; i++) 
r++; 
다른

돌아가 새로운 색상; 내 최고 "솔루션"이 있었다

아무도 도와 줄 수 있습니까?

답변

1

그래디언트 (수평, 수직 또는 대각선)를 어떻게 원하는지 잘 모르겠지만 여기에는 수평 또는 수직 그래디언트에 선형 보간법을 사용하는 예가 나와 있습니다.

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import javax.swing.BoxLayout; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class ExampleFrame extends JFrame { 

    private static enum GradientOrientation { 
     HORIZONTAL, VERTICAL 
    }; 

    private static BufferedImage createGradientImg(int width, int height, Color startColor, Color endColor, GradientOrientation o) { 
     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
     for (int x = 0; x < width; x++) { 
      for (int y = 0; y < height; y++) { 
       int pos = o.equals(GradientOrientation.HORIZONTAL) ? x : y; 
       int size = o.equals(GradientOrientation.HORIZONTAL) ? width : height; 
       image.setRGB(x, y, getGradientRGB(startColor, endColor, pos, size)); 
      } 
     } 
     return image; 
    } 

    private static int getGradientRGB(Color startColor, Color endColor, int pos, int size) { 
     double perc = (double) pos/size; 
     int newRed = (int) (endColor.getRed() * perc + startColor.getRed() * (1 - perc)); 
     int newGreen = (int) (endColor.getGreen() * perc + startColor.getGreen() * (1 - perc)); 
     int newBlue = (int) (endColor.getBlue() * perc + startColor.getBlue() * (1 - perc)); 
     return new Color(newRed, newGreen, newBlue).getRGB(); 
    } 

    public void createAndShow() { 
     BufferedImage img1 = createGradientImg(200, 100, Color.RED, 
       Color.WHITE, GradientOrientation.HORIZONTAL); 
     BufferedImage img2 = createGradientImg(200, 100, Color.BLUE, 
       Color.YELLOW, GradientOrientation.HORIZONTAL); 
     BufferedImage img3 = createGradientImg(200, 100, Color.WHITE, 
       Color.YELLOW, GradientOrientation.VERTICAL); 
     BufferedImage img4 = createGradientImg(200, 100, Color.BLACK, 
       Color.WHITE, GradientOrientation.VERTICAL); 

     BoxLayout layout = new BoxLayout(getContentPane(), BoxLayout.Y_AXIS); 
     getContentPane().setLayout(layout); 
     getContentPane().add(new JLabel(new ImageIcon(img1))); 
     getContentPane().add(new JLabel(new ImageIcon(img2))); 
     getContentPane().add(new JLabel(new ImageIcon(img3))); 
     getContentPane().add(new JLabel(new ImageIcon(img4))); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       ExampleFrame ef = new ExampleFrame(); 
       ef.createAndShow(); 
      } 
     }); 
    } 
} 
+0

하지만 스윙이나 awt를 사용하고 싶지 않습니다. 정적 인 색상 방법을 편집하는 작업 만 수행 할 수 있습니까? –

+0

나는 무엇을 성취하려고하는지 완전히 모르겠다.하지만 내'getGradientRGB()'메소드에 대한'color12()'메소드를 바꿀 수있다; 그냥 올바른 매개 변수를 전달하십시오. 내 예제에서 그래디언트 이미지를 만드는 데 사용되는 유일한 클래스는 원래 질문과 같이'BufferedImage'와'Color'입니다. 이 두 가지 모두'awt' 패키지의 일부입니다. 나머지는 순전히 데모 용입니다. 예를 들어이를 표시하려면 GUI로 표시하려면 awt/Swing/JavaFX/swt/etc를 사용해야합니다. 처음부터 라이브러리를 빌드하려는 경우가 아니면 –

+0

안녕하세요. 그래서 저는 예를 들어 빨간 색으로 시작하는 색을 만들고 싶습니다. 그리고 그것은 (255,0,0)에서 (255,255,255)로 단계적으로갑니다. 유창한 방법으로 적색에서 흰색으로. 내 color12 방법은 이미 색상을 만들고 있지만 1은 많지 않습니다. 나는 많은 색깔 (빨강에서 흰색으로)을 원한다. 나는 주된 방법으로 주위에 놀았다. 그러나 couldnt는 그것을 올바르게하는 길을 알아 듣는다. 나는 for 또는 while 메서드를 color12에 추가 할 필요가 있다고 생각하지만, 확실하지는 않습니다. 어쩌면 당신은 저를 이해할 것입니다. (제 영어가 유창하지 않기 때문에 잘 알고 있습니다.) –

관련 문제