怎样获得当前mouse坐标处的颜色??

hccpro 2001-06-16 10:19:00
...全文
148 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
v不吃v你 2001-06-21
//程序有误,更正如下。
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+ ")");
}
}
  • 打赏
  • 举报
回复
v不吃v你 2001-06-21
//把graphics 转成Image 困难。我还没找到方法。
//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+ ")");
}
}
  • 打赏
  • 举报
回复
hccpro 2001-06-18

怎样把指定的矩形区域转成Image呢??

thank !
  • 打赏
  • 举报
回复
v不吃v你 2001-06-17
不过就是不用swing ,那么ImageIcon就不能用。
不用ImageIcon则grabber.grabPixels(); 会有问题。
我估计是不能保证图象象素被取到的原因。
看看swing2那本书,上面关于ImageIcon的解释就是这里用ImageIcon的理由。
我试过用MediaTracker但是没有成功。
改在客户端我想会有一些改动。
但是总体结构上是不会变的。

  • 打赏
  • 举报
回复
hccpro 2001-06-17

感谢各位前辈,尤其是bootcool,俺明白您的意思了,就剩下怎样把绘制的图形转成

Image了,俺回去试试,

很快就会给分!!
  • 打赏
  • 举报
回复
knight_qmh 2001-06-17
用BufferedImage就可以了,如:
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));
再作判断就好了,你试试。
  • 打赏
  • 举报
回复
v不吃v你 2001-06-17
当然要取得象素了!!!!!!
你想象一下,你的鼠标是随意点的。
你事先不会知道鼠标会点到哪个图形区域中去。
而你的每一个图形区域的颜色是不同的。
同一个区域中颜色相同,那么在这个区域中的
鼠标无论在哪一点取得的象素值都是相同的。

那么你事先可以把不同区域的颜色存(象素)存在一个地方,
今后每点一次鼠标,取得象素值,和表中值比较。
不同则在比,总可以在先造好的表中得到与你的鼠标值相同的值,然后输出是某某图形区域就行了。
这样就可以知道是在哪个图形区域中了。
如果你不取的每一点的象素值然后比较判断的话,恐怕不行吧。

比如,你有红,黄两个区域。形状不规则,你在某处随意点下鼠标,取得该点象素值。
如果是(xxx,xxx,xxx)则是红中的。说明鼠标当前在红色图形区域中。
如果是(yyy,yyy,yyy)则是黄中的。说明鼠标当前在黄色图形区域中。
但是你事先得有一个比较的表。取了象素则和表中值比较,输出结果。
  • 打赏
  • 举报
回复
hccpro 2001-06-17

大可不必用ImageIcon,俺的程序不要求取来图像的像素。

程序会绘制图形,形状不定,每个形状都会填充唯一一种颜色,俺需要知道mouse当前

所在哪一个图形里。
  • 打赏
  • 举报
回复
v不吃v你 2001-06-16
应该没有问题。
  • 打赏
  • 举报
回复
hccpro 2001-06-16

哇,又是您啊!!厉害,以后分就直接给您好了,呵呵!

您的程序用了swing,俺需要在客户端运行,用AWT好不好使??
  • 打赏
  • 举报
回复
v不吃v你 2001-06-16
//不知是不是这个意思?
//希望这个程序对你有用
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+ ")");
}
}
  • 打赏
  • 举报
回复
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2001-06-16 10:19
社区公告
暂无公告