//image BufferedImage 格式:BufferedImage.TYPE_INT_ARGB
// width=image.getWidth();
//line 行数
//需求 取图片第line行的R,G数据,int r[]=new int[width];
int g[]=new int[width];
WritableRaster raster = image.getRaster();
int colorData[]=new int[4];
for (int i = 0; i < width; i++) {
colorData=raster.getPixel(i,line,colorData);
r[i]=colorData[0];
g[i]=colorData[1];
//这里的值是255或是0,请问是否正确
}
// width=image.getWidth();
//line 行数
//需求 取图片第line行的R,G数据,int r[]=new int[width];
int g[]=new int[width];
WritableRaster raster = image.getRaster();
int colorData[]=new int[4];
for (int i = 0; i < width; i++) {
colorData=raster.getPixel(i,line,colorData);
r[i]=colorData[0];
g[i]=colorData[1];
//这里的值是255或是0,请问是否正确
}
...;
...
// 注意
ColorModel cm = bi.getColorModel();int r[]=new int[width];
int g[]=new int[width];
WritableRaster raster = image.getRaster();
int colorData[]=new int[4];
for (int i = 0; i < width; i++) {
// 这里得到的是像素,数组中的元素是取样,不是颜色
// 所以,colorData应改名为pixel
colorData=raster.getPixel(i,line,colorData); int blue = cm.getBlue(colorData);
int red = cm.getRed(colorData);
int green = cm.getGreen(colorData);
int alpha = cm.getAlpha(colorData);
}
TO:UnAgain发出red,green都为0图片背景色为黑,前景色为(255,255,0),完整程序如下:
/** width 图片宽
* height高
* xPixel 文字输出的X坐标
* yPixel 输出的Y坐标
* displayConent 图片内容
**/
public void sendGeneralContent(int width,int height,int xPixel,int yPixel,Object displayContent){
try{
BufferedImage displayImage=new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
String displayContentStr=(String)displayContent;
Graphics g = displayImage.getGraphics();
//定义图像背景
g.setColor(Color.black);
g.fillRect(0, 0, width, height);
//图像前景色
Color contentColor =new Color(255,255,0);
g.setColor(contentColor);
//创建图片要显示得内容
g.drawString(displayContentStr, xPixel, yPixel);
//生产图像
g.dispose();
/** width 图片宽
* height高
* xPixel 文字输出的X坐标
* yPixel 输出的Y坐标
* displayConent 图片内容
**/
public void sendGeneralContent(int width,int height,int xPixel,int yPixel,Object displayContent){
BufferedImage displayImage=new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
String displayContentStr=(String)displayContent;
Graphics g = displayImage.getGraphics();
//定义图像背景
g.setColor(Color.black);
g.fillRect(0, 0, width, height);
//图像前景色
Color contentColor =new Color(255,255,0);
g.setColor(contentColor);
//创建图片要显示得内容
g.drawString(displayContentStr, xPixel, yPixel);
g.dispose();//取red,green
for (int i = 0; i < displayImage.getHeight(); i++) {
//CM
ColorModel cm = displayImage.getColorModel();
int w=displayImage.getWidth();
int r[]=new int[w];
int g[]=new int[w];
WritableRaster raster = displayImage.getRaster();
int pixel[]=new int[4];//pixel
for (int j = 0; j < width; j++) {
pixel=raster.getPixel(j,i,pixel); r[i]=cm.getRed(pixel);
g[i]=cm.getGreen(pixel);
System.out.println(r[i]+":"+g[i]);//,当图片内容不为空(如:ABCDEFG),r[i]和g[全部为0
}
}
}
// 但是按照你原来的办法,取样可以显示正确的颜色值。
// 我最近正好也在研究java2D image,有问题我们可以讨论。
// MSN: [email protected]
// 现在有事,最晚下午3点上线。import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;import javax.swing.*;
import javax.swing.border.*;public class TestCreateImage extends JPanel{
BufferedImage bi;
public TestCreateImage() {
addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent e){
Raster ra = bi.getData();
ColorModel cm = bi.getColorModel();
int[] pixel = new int[4]; pixel = ra.getPixel(e.getX(), e.getY(), pixel); System.out.println("/////////////////////////////////");
for (int i=0; i<pixel.length; i++) {
System.out.println(pixel[i]);
}
System.out.println("------------------------------------------");
System.out.println("red: " + String.valueOf(cm.getRed(pixel[0])));
System.out.println("green: " + String.valueOf(cm.getGreen(pixel[1])));
System.out.println("blue: " + String.valueOf(cm.getBlue(pixel[2])));
System.out.println("alpha: " + String.valueOf(cm.getAlpha(pixel[3])));
}
});
} public void paintComponent(Graphics g) {
int width = getWidth(),
height = getHeight();
int unit = 20;
if (bi == null) {
bi =
new BufferedImage(
width, height,
BufferedImage.TYPE_INT_ARGB);
//bi = (BufferedImage)this.createImage(width, height);
//Graphics2D big = bi.createGraphics();
Graphics big = bi.getGraphics();
big.setColor(Color.RED); Color c1 = new Color(128, 128, 128),
c2 = new Color(64, 128, 192),
c3 = new Color(32, 96, 160); big.setColor(c1);
big.fillRect(0, 0, width/3, height); big.setColor(c2);
big.fillRect(width/3 + 1, 0, width/3, height); big.setColor(c3);
big.fillRect(width*2/3 + 1, 0, width - width*2/3, height);
} g.drawImage(bi, 0, 0, width, height, this); String[] pn = bi.getPropertyNames();
if (pn != null) {
for (int i=0; i<pn.length; i++) {
System.out.println(pn[i] + ":\t" + bi.getProperty(pn[i]));
}
}
} public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = frame.getContentPane(); frame.setPreferredSize(new Dimension(400, 300));
container.add(new TestCreateImage()); frame.pack();
frame.setVisible(true);
}
}
Programmer's Guide to the JavaTM 2D API -- Chapter 6 Color <http://blog.csdn.net/unagain/archive/2006/05/05/708656.aspx>LookupTable (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707561.aspx>
ComponentSampleModel (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707558.aspx>
BandCombineOp (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707557.aspx>