1.求教一个 drawLine方法,求教从任意点画一条直线,直线上要显示出渐进色的变化。
2.在1.的基础上,要求用渐进色的线画一个栅格结构。我写了一些代码,但是关键的drawLine和栅格的画法还没研究出来,请大家帮忙想想啊~~import java.awt.*;
import java.awt.Color;
import java.awt.image.*;
import java.util.*;public class U01A1 extends Frame{
final int W=300;
final int H=200;
Image m_Img;
MemoryImageSource m_ImgScr;
int [] m_Pix=new int[W*H];
public U01A1(){
super("Color Line");
setSize(W,H);
for(int i=0;i<m_Pix.length;++i){
m_Pix[i]= 255<<0;
}
m_ImgScr=new MemoryImageSource(W,H,m_Pix,0,W);
m_Img=createImage(m_ImgScr);
setVisible(true);
getGraphics().drawImage(m_Img,0,0,this);
}
// 这个drawLine 方法没对,线的中间有断了一块.... public void drawLine(int x1,int y1,int x2,int y2,Color color1,Color color2){
int col1=color1.getRGB();
int col2=color2.getRGB();
int dx=Math.abs(x2-x1);
int dy=Math.abs(y2-y1);
if(dx>dy){
for(int i=0;i<dx;++i){
double dx1 = x2-x1;
double dy1 = y2-y1; double i1 = dx1== dx?i:-i;
double gesucht = (i1/dx1)*dy1; // ??????????
final int P = 100*i/dx;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);
}
}
else{
for(int i=0;i<dx;++i){
System.out.println("2.");
double dx1 = x2-x1;
double dy1 = y2-y1; double i1 = dy1==dy?i:-i;
double gesucht = (i1/dy1)*dx1;
final int P = 100*i/dy;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);
}
}
m_Img.flush();
getGraphics().drawImage(m_Img,0,0,this);
}
public void update(Graphics g) {}
public void paint(Graphics g) {
drawLine(100,150,50,100,Color.red,Color.black);
}
int singleShuffle(int i1_part, int i2_part, int p) {
return i1_part+(i2_part-i1_part)*p/100;
}
int colorShuffle(int i1, int i2, int p) {
int red = singleShuffle((i1 >> 16) & 255,(i2 >> 16) & 255,p);
int green = singleShuffle((i1 >> 8) & 255,(i2 >> 8) & 255,p);
int blue = singleShuffle((i1) & 255,(i2) & 255,p);
return (255 << 24) | (red << 16) | (green << 8) | blue;
}
public static void main(String[]args){
U01A1 u= new U01A1();
}
}
2.在1.的基础上,要求用渐进色的线画一个栅格结构。我写了一些代码,但是关键的drawLine和栅格的画法还没研究出来,请大家帮忙想想啊~~import java.awt.*;
import java.awt.Color;
import java.awt.image.*;
import java.util.*;public class U01A1 extends Frame{
final int W=300;
final int H=200;
Image m_Img;
MemoryImageSource m_ImgScr;
int [] m_Pix=new int[W*H];
public U01A1(){
super("Color Line");
setSize(W,H);
for(int i=0;i<m_Pix.length;++i){
m_Pix[i]= 255<<0;
}
m_ImgScr=new MemoryImageSource(W,H,m_Pix,0,W);
m_Img=createImage(m_ImgScr);
setVisible(true);
getGraphics().drawImage(m_Img,0,0,this);
}
// 这个drawLine 方法没对,线的中间有断了一块.... public void drawLine(int x1,int y1,int x2,int y2,Color color1,Color color2){
int col1=color1.getRGB();
int col2=color2.getRGB();
int dx=Math.abs(x2-x1);
int dy=Math.abs(y2-y1);
if(dx>dy){
for(int i=0;i<dx;++i){
double dx1 = x2-x1;
double dy1 = y2-y1; double i1 = dx1== dx?i:-i;
double gesucht = (i1/dx1)*dy1; // ??????????
final int P = 100*i/dx;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);
}
}
else{
for(int i=0;i<dx;++i){
System.out.println("2.");
double dx1 = x2-x1;
double dy1 = y2-y1; double i1 = dy1==dy?i:-i;
double gesucht = (i1/dy1)*dx1;
final int P = 100*i/dy;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);
}
}
m_Img.flush();
getGraphics().drawImage(m_Img,0,0,this);
}
public void update(Graphics g) {}
public void paint(Graphics g) {
drawLine(100,150,50,100,Color.red,Color.black);
}
int singleShuffle(int i1_part, int i2_part, int p) {
return i1_part+(i2_part-i1_part)*p/100;
}
int colorShuffle(int i1, int i2, int p) {
int red = singleShuffle((i1 >> 16) & 255,(i2 >> 16) & 255,p);
int green = singleShuffle((i1 >> 8) & 255,(i2 >> 8) & 255,p);
int blue = singleShuffle((i1) & 255,(i2) & 255,p);
return (255 << 24) | (red << 16) | (green << 8) | blue;
}
public static void main(String[]args){
U01A1 u= new U01A1();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货