| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖
标题:[求助]图形填充问题
只看楼主 加入收藏
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
结帖率:66.67%
收藏
 问题点数:0 回复次数:2 
[求助]图形填充问题

在本论坛里找到的加载BMP图像代码,我要做的是把封闭的区域填充成一个随机色.
使用的是十字方向的像素判断,用数组模拟栈(我不会在JAVA中用栈),但填充不上(在MFC下能实现),也就是说问题出在JAVA上,我会的有限,请路过的神仙帮一下,谢谢.

代码如下:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.Robot;
import javax.imageio.ImageIO;
/*
* BoundFill.java
*
* Created on 2007年10月9日, 下午1:37
*/

/**
*
* @author freeforever
*/
public class BoundFill extends javax.swing.JFrame {

/** Creates new form BoundFill */
public BoundFill() {
initComponents();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
});

jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel1MouseClicked(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents

private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
Image image =null;
try{
image=ImageIO.read(new File("f:/12.bmp"));
}catch(IOException ex){}
jLabel1.setIcon(new javax.swing.ImageIcon(image));//加载图片
}//GEN-LAST:event_formComponentShown

private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked
Point posCurrent;
posCurrent=getMousePosition();
try
{
robot = new Robot();
point = MouseInfo.getPointerInfo().getLocation();//坐标
color = robot.getPixelColor(point.x, point.y);//取色
}
catch(Exception ex)
{
ex.printStackTrace();
}

g=getGraphics();
Color FillColor=new Color(
(int)(Math.random()*255),
(int)(Math.random()*255),
(int)(Math.random()*255)
);
g.setColor(FillColor);//设置填充色

Point posStk[] = new Point [65535];//模拟栈的点
Point rePos,pos4;//判断用的点和判断的十字方向点

int top=0;
posStk[++top] = posCurrent;//原始点入栈
while(top!=0)
{

rePos=posStk[top--];/*取栈顶元素,并模拟出栈*/pos4=rePos;//初始化
g.drawLine(rePos.x,rePos.y,rePos.x,rePos.y);//着色该点

pos4.x=rePos.x+1; pos4.y=rePos.y;//右边的点
if(robot.getPixelColor(pos4.x, pos4.y)==color)//与鼠标取色相同
posStk[++top] = pos4;//入栈

g.drawString(""+color,30,48);//调试信息,原始色
g.drawString(""+robot.getPixelColor(pos4.x, pos4.y),30,58);//调试信息
pos4.x=rePos.x; pos4.y=rePos.y-1;//上边的点
if(robot.getPixelColor(pos4.x, pos4.y)==color)
posStk[++top] = pos4;

g.drawString(""+robot.getPixelColor(pos4.x, pos4.y),30,68);//调试信息
pos4.x=rePos.x-1; pos4.y=rePos.y;//左边的点
if(robot.getPixelColor(pos4.x, pos4.y)==color)
posStk[++top] = pos4;

g.drawString(""+robot.getPixelColor(pos4.x, pos4.y),30,78);//调试信息
pos4.x=rePos.x; pos4.y=rePos.y+1;//左边的点
if(robot.getPixelColor(pos4.x, pos4.y)==color)
posStk[++top] = pos4;

g.drawString(""+robot.getPixelColor(pos4.x, pos4.y),30,88);//调试信息
}
}//GEN-LAST:event_jLabel1MouseClicked

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new BoundFill().setVisible(true);
}
});
}

// 变量声明 - 不进行修改//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
// 变量声明结束//GEN-END:variables
private Graphics g;
private Robot robot;
private Color color = new Color(0, 0, 0);
private Point point;
}
在NetBeans5.5.1中文版下写的代码

HUMa0qr0.rar (21.45 KB) [求助]图形填充问题


[此贴子已经被作者于2007-10-11 21:35:38编辑过]

搜索更多相关主题的帖子: 图形 
2007-10-11 21:32
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 


其实我也很无聊!
2007-10-18 16:16
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;

public class BoundFill4
{
public static void main(String[] args)
{
new AppFrame();
}
}

class AppFrame extends JDialog
{
JLabel pic = new JLabel();//声明加载图片用的JLabel
public AppFrame()
{
getContentPane().add(pic);//增加标签到容器上
Image image =null;
try{//加载图片到窗口(JLabel)中
image=ImageIO.read(new File("f:/12.bmp"));
}catch(IOException ex){}
pic.setIcon(new javax.swing.ImageIcon(image));//加载
MouseClick listener=new MouseClick(); //鼠标事件处理
pic.addMouseListener(listener); //增加标签的事件处理
setLayout(new FlowLayout());
setLocation(200,200);//位置
setSize(230,225);//大小
show();//显示
}

class MouseClick implements MouseListener
{
Point p = new Point(0,0);
int top=0;//初始化栈
//鼠标事件处理
public void mouseClicked(MouseEvent e)//throw Exception
{
Point newP = e.getPoint();//SwingUtilities.convertPoint(pic,e.getPoint(),pic.getParent());
Robot robot;
Point point = new Point(0,0);
Color color = new Color(0,0,0);;
Graphics g=getGraphics();
Color FillColor=new Color(
(int)(Math.random()*255),
(int)(Math.random()*255),
(int)(Math.random()*255)
);
Point posStk[] = new Point [65535];//模拟栈的点
Point rePos,pos4;//判断用的点和判断的十字方向点

try
{
robot = new Robot();
point = MouseInfo.getPointerInfo().getLocation();
color = robot.getPixelColor(point.x, point.y);
}
catch(Exception err)
{
err.printStackTrace();
}
System.out.println("相对坐标: ("+newP.x+","+newP.y+")");
System.out.println("屏幕坐标: ("+point.x+","+point.y+")");
System.out.println("鼠标处颜色:"+color);

g.setColor(FillColor);//设置填充色
posStk[++top] = point;//原始点入栈
System.out.println("原点入栈后top"+top);

while(top!=0)
{

Robot rbt;

rePos=posStk[top--];/*取栈顶元素,并模拟出栈*/pos4=rePos;//初始化
g.drawLine(rePos.x,rePos.y,rePos.x,rePos.y);//着色该点

try
{
rbt = new Robot();
pos4.x=rePos.x+1; pos4.y=rePos.y;//右边的点
if(rbt.getPixelColor(pos4.x, pos4.y).getRed()==color.getRed() &&
rbt.getPixelColor(pos4.x, pos4.y).getGreen()==color.getGreen() &&
rbt.getPixelColor(pos4.x, pos4.y).getBlue()==color.getBlue() )//与鼠标取色相同
{
posStk[++top] = pos4;//入栈
}
}catch(Exception err){err.printStackTrace();}

try
{
rbt = new Robot();
pos4.x=rePos.x; pos4.y=rePos.y-1;//上边的点
if(rbt.getPixelColor(pos4.x, pos4.y).getRed()==color.getRed() &&
rbt.getPixelColor(pos4.x, pos4.y).getGreen()==color.getGreen() &&
rbt.getPixelColor(pos4.x, pos4.y).getBlue()==color.getBlue() )//与鼠标取色相同
{
posStk[++top] = pos4;
}
}catch(Exception err){err.printStackTrace();}

try
{
rbt = new Robot();
pos4.x=rePos.x-1; pos4.y=rePos.y;//左边的点
if(rbt.getPixelColor(pos4.x, pos4.y).getRed()==color.getRed() &&
rbt.getPixelColor(pos4.x, pos4.y).getGreen()==color.getGreen() &&
rbt.getPixelColor(pos4.x, pos4.y).getBlue()==color.getBlue() )//与鼠标取色相同
{
posStk[++top] = pos4;
}
}catch(Exception err){err.printStackTrace();}

try
{
rbt = new Robot();
pos4.x=rePos.x; pos4.y=rePos.y+1;//下边的点
if(rbt.getPixelColor(pos4.x, pos4.y).getRed()==color.getRed() &&
rbt.getPixelColor(pos4.x, pos4.y).getGreen()==color.getGreen() &&
rbt.getPixelColor(pos4.x, pos4.y).getBlue()==color.getBlue() )//与鼠标取色相同
{
posStk[top++] = pos4;
}
}catch(Exception err){err.printStackTrace();}
}
}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){/*鼠标移入事件*/}
public void mouseExited(MouseEvent e){/*鼠标移出事件*/}
public void mousePressed(MouseEvent e){}
}
}

重写的代码也不行,我要一直顶到有人回答为止!!


其实我也很无聊!
2007-10-19 19:11
快速回复:[求助]图形填充问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014380 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved