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

hccpro 2001-06-16 10:19:00
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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+ ")");
}
}
对整threeJS体系进行全面剖析。整理出全面的教学大纲,涵盖内容面非常广。此教学版本为threeJS107版本。关于版本不建议大家使用低于90的版本学习。以下是课程目录1-ThreeJS概览(基本图形简介,什么是点线面如何绘制点线面,什么是材质,什么是几何体,什么是相机,什么是渲染器,什么是场景)2-相机和渲染器(详解相机类型,渲染器如何使用,针对不同场景怎么用,怎么调效果,怎么渲染,怎么输出画布,如何解决透明问题等等)3-创建平面几何(常见的几何体如何使用,如何使用简单的几何体绘制出自定义自己想要的几何体,关于几何体的性能剖析,如何解决性能,几何体的渲染原理)4-高级图形算法常见库(求直线的斜率  计算线段与圆的交点 计算线段的长度 判断折线是否在多边形内 等等)5-sprite精灵(怎么让一个图标永远朝向屏幕,精灵的属性,精灵材质原理等,广告提示框必用)6-骨骼游戏动画(什么是模型动画,常见游戏案例,如何让人头进行各种攻击动作)7-3d模型加载(常见模型格式,如何渲染不同格式,不同格式的特点,什么格式性能优越,模型渲染异常,贴图不显示等问题详解)8-高阶动态纹理(你所不知道的纹理用法,我说你不知道,你肯定不知道)9-漫游轨迹以及其动画路径(怎么绘制贝塞尔曲线,如何使用曲线上的路径,跟随路径移动的原理,相机如何运动,物体如何运动)10-着色器(什么是着色器。初识着色器基础,着色器材质怎么用,怎么使用着色器库)11-常见渲染以及透明度问题12-对象拾取以及拖拽(3d世界里面如何拖拽物体,拖拽的原理,mousemove mouseon等的事件效果)13-世界坐标以及组的问题(什么是相对坐标,什么是世界坐标,什么是当前坐标,怎么转化父子坐标系,组的优化,为什么用组,组的优势)14-指定对象旋转中心(什么是物体的几何体中心,如何改变中心,如何绕轴转动)15-层级对象渲染(多个场景一键切换,切换的优势,针对大项目的用法)16-拓展了解系列(不定期不断更新案例,各种酷炫效果bloom,halo等,以及各种3d图表,粒子案例等,不断构建你的3d实践能力)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧