//不知是不是这个意思?
//希望这个程序对你有用
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*; public class GetPixel {public PixelMadness() {
ImageHolder holder = new ImageHolder();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(holder);
frame.getContentPane().add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}public static void main(String[] args) {
GetPixel getpixel = new GetPixel();
}}class ImageHolder extends Canvas {
ImageIcon icon = new ImageIcon("zx2.jpg");
Image image = icon.getImage();
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
int[] pixelArray = new int[imageWidth * imageHeight];
PixelGrabber grabber = new PixelGrabber(image,0,0,imageWidth,imageHeight,pixelArray,0,imageWidth);public ImageHolder() {
try { grabber.grabPixels(); }
catch(InterruptedException ie){
System.out.println("Pixel array not completed");
return;
}addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
int mouseX = (int)me.getPoint().getX();
int mouseY =(int) me.getPoint().getY();
int pixel = pixelArray[(mouseY * imageWidth) + mouseX];
getPixel(pixel);
}
});setSize(imageWidth,imageHeight);
}public void paint(Graphics g){
int xCenter = (getSize().width / 2) - (imageWidth / 2);
int yCenter = (getSize().height / 2) - (imageHeight / 2);
g.drawImage(image, xCenter, yCenter, imageWidth, imageHeight, this);
}public void getPixel(int pixel){
int alpha = (pixel >> 24)&0xff;
int red = (pixel >> 16)&0xff;
int green = (pixel >> 8)&0xff;
int blue = (pixel)&0xff;
System.out.println( "("+alpha+","+red+","+green+ ","+blue+ ")");
}
}
//希望这个程序对你有用
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*; public class GetPixel {public PixelMadness() {
ImageHolder holder = new ImageHolder();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(holder);
frame.getContentPane().add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}public static void main(String[] args) {
GetPixel getpixel = new GetPixel();
}}class ImageHolder extends Canvas {
ImageIcon icon = new ImageIcon("zx2.jpg");
Image image = icon.getImage();
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
int[] pixelArray = new int[imageWidth * imageHeight];
PixelGrabber grabber = new PixelGrabber(image,0,0,imageWidth,imageHeight,pixelArray,0,imageWidth);public ImageHolder() {
try { grabber.grabPixels(); }
catch(InterruptedException ie){
System.out.println("Pixel array not completed");
return;
}addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
int mouseX = (int)me.getPoint().getX();
int mouseY =(int) me.getPoint().getY();
int pixel = pixelArray[(mouseY * imageWidth) + mouseX];
getPixel(pixel);
}
});setSize(imageWidth,imageHeight);
}public void paint(Graphics g){
int xCenter = (getSize().width / 2) - (imageWidth / 2);
int yCenter = (getSize().height / 2) - (imageHeight / 2);
g.drawImage(image, xCenter, yCenter, imageWidth, imageHeight, this);
}public void getPixel(int pixel){
int alpha = (pixel >> 24)&0xff;
int red = (pixel >> 16)&0xff;
int green = (pixel >> 8)&0xff;
int blue = (pixel)&0xff;
System.out.println( "("+alpha+","+red+","+green+ ","+blue+ ")");
}
}
哇,又是您啊!!厉害,以后分就直接给您好了,呵呵!您的程序用了swing,俺需要在客户端运行,用AWT好不好使??
不用ImageIcon则grabber.grabPixels(); 会有问题。
我估计是不能保证图象象素被取到的原因。
看看swing2那本书,上面关于ImageIcon的解释就是这里用ImageIcon的理由。
我试过用MediaTracker但是没有成功。
改在客户端我想会有一些改动。
但是总体结构上是不会变的。
大可不必用ImageIcon,俺的程序不要求取来图像的像素。程序会绘制图形,形状不定,每个形状都会填充唯一一种颜色,俺需要知道mouse当前所在哪一个图形里。
你想象一下,你的鼠标是随意点的。
你事先不会知道鼠标会点到哪个图形区域中去。
而你的每一个图形区域的颜色是不同的。
同一个区域中颜色相同,那么在这个区域中的
鼠标无论在哪一点取得的象素值都是相同的。那么你事先可以把不同区域的颜色存(象素)存在一个地方,
今后每点一次鼠标,取得象素值,和表中值比较。
不同则在比,总可以在先造好的表中得到与你的鼠标值相同的值,然后输出是某某图形区域就行了。
这样就可以知道是在哪个图形区域中了。
如果你不取的每一点的象素值然后比较判断的话,恐怕不行吧。比如,你有红,黄两个区域。形状不规则,你在某处随意点下鼠标,取得该点象素值。
如果是(xxx,xxx,xxx)则是红中的。说明鼠标当前在红色图形区域中。
如果是(yyy,yyy,yyy)则是黄中的。说明鼠标当前在黄色图形区域中。
但是你事先得有一个比较的表。取了象素则和表中值比较,输出结果。
import java.awt.color.*;
....
BufferedImage bi = new BufferedImage(400,300,ColorSpace.TYPE_RGB);
//画图
Graphics g = bi.getGraphics();
g.drawString(...);
//取得象素
Color color = new Color(bi.getRGB(int x, int y));
再作判断就好了,你试试。
感谢各位前辈,尤其是bootcool,俺明白您的意思了,就剩下怎样把绘制的图形转成Image了,俺回去试试,很快就会给分!!
怎样把指定的矩形区域转成Image呢??thank !
//knight_qmh(辉)的想法提示了我,我想可以用这样的方法实现同
//样的功能。并且满足你的要求。用bufferimage画图。
//图形可以为你自己绘制的长方形等等,或是从文件读入的图象。import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*; public class GetRectPixel {public GetRectPixel() {
ImageHolder holder = new ImageHolder();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(holder);
frame.getContentPane().add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}public static void main(String[] args) {
GetPixel getpixel = new GetPixel();
}
}class ImageHolder extends Canvas{
int rectWidth = 80;
int rectHeight = 80;
BufferedImage bi ;public ImageHolder() {
bi = new BufferedImage(400,400,BufferedImage.TYPE_INT_RGB);
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
int mouseX = (int)me.getPoint().getX();
int mouseY =(int) me.getPoint().getY();
getPixel(mouseX,mouseY);
}
});setSize(100,100);
}public void paint(Graphics g){
g.drawRect(50, 50,rectWidth,rectHeight);
g.setColor(Color.red);
g.fillRect(50, 50,rectWidth,rectHeight);
}public void getPixel(int x,int y){
int rgb = bi.getRGB(x,y);
int red = (rgb>>24)&0xff;
int green = (rgb>>16)&0xff;
int blue = (rgb>>8)&0xff;
System.out.println( "("+red+","+green+ ","+blue+ ")");
}
}
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*; public class GetRectPixel {public GetRectPixel() {
ImageHolder holder = new ImageHolder();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(holder);
frame.getContentPane().add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}public static void main(String[] args) {
GetPixel getpixel = new GetPixel();
}
}class ImageHolder extends Canvas{
BufferedImage bi ;
Image image;
MediaTracker mt ;
int imageWidth;
int imageHeight;public ImageHolder() {
mt =new MediaTracker(this);
try{
image = Toolkit.getDefaultToolkit().createImage("gigi3.jpg");
mt.addImage(image,0);
mt.waitForAll();
imageWidth = image.getWidth(this);
imageHeight = image.getHeight(this);
}
catch(Exception e){}
bi = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
int mouseX = (int)me.getPoint().getX();
int mouseY =(int) me.getPoint().getY();
getPixel(mouseX,mouseY);
}
});setSize(imageWidth,imageHeight);
}public void paint(Graphics g){
int xCenter = (getSize().width / 2) - (imageWidth / 2);
int yCenter = (getSize().height / 2) - (imageHeight / 2);
g.drawImage(image, xCenter, yCenter, imageWidth, imageHeight, this);
}public void getPixel(int x,int y){
ColorModel cm = this.getColorModel();
int rgb = cm.getRGB(x*y);
int red = (rgb>>24)&0xff ;
int green = (rgb>>16)&0xff ;
int blue = (rgb>>8)&0xff ;
System.out.println( "("+red+","+green+ ","+blue+ ")");
}
}