用java读取位图

panmu 2002-06-05 08:53:46
在java中如何读位图,并分析它的灰度值,并分析出概率
谢谢!!!!
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
panmu 2002-06-07
  • 打赏
  • 举报
回复
真得非常感谢你,我给分。
你能告诉我你是怎么知道这些东西的呢
受人以鱼,不如授之以渔。
你能告诉我学习的途径吗?

还有,如果我想把每个像素点的rgb值都输出到屏幕上应该怎么做。
你给我的程序是对整幅图像进行处理,我想得到图中任意一点的rgb值,
能发信给我吗?panmu@yeah.net
再次感谢,可以的话,我会再开贴给分的。
fightboy 2002-06-06
  • 打赏
  • 举报
回复
//file1
import java.awt.image.*;

public class BWFilter extends RGBImageFilter {
public BWFilter() {
canFilterIndexColorModel = true;
}
public int filterRGB(int x, int y, int rgb) {
DirectColorModel cm =
(DirectColorModel)ColorModel.getRGBdefault();

int alpha = cm.getAlpha(rgb);
int red = cm.getRed (rgb);
int green = cm.getGreen(rgb);
int blue = cm.getBlue (rgb);
int mixed = (red + green + blue) / 3;

red = blue = green = mixed;
alpha = alpha << 24;
red = red << 16;
green = green << 8;

return alpha | red | green | blue;
}
}

//file2
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.URL;

public class BWFilterTest extends Applet {
private Image im, bw;

public void init() {
loadImage();
filterImage();
}
public void paint(Graphics g) {
int imw = im.getWidth(this);

g.drawImage(im,0,0,this);
g.drawImage(bw,imw,0,this);
}
private void loadImage() {
try {
URL url = getClass().getResource("tiger.gif");
im = createImage((ImageProducer)url.getContent());
}
catch(Exception e) {
e.printStackTrace();
}

MediaTracker mt = new MediaTracker(this);
mt.addImage(im, 0);
try {
mt.waitForID(0);
}
catch(Exception e) {
e.printStackTrace();
}
}
private void filterImage() {
bw = createImage(new FilteredImageSource(im.getSource(), new BWFilter()));
// bw = javax.swing.GrayFilter.createDisabledImage(im);
}
}

//test.html

<title>BWFilterTest</title>
<applet code="BWFilterTest.class" width=680 height=375></applet>
panmu 2002-06-05
  • 打赏
  • 举报
回复
可否有例程给我借鉴一下?
多谢!
fightboy 2002-06-05
  • 打赏
  • 举报
回复
BufferedImage _image;
String name=".......";

Image loadedImage = Toolkit.getDefaultToolkit().getImage(name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(loadedImage, 0);
try { tracker.waitForID(0); }
catch (InterruptedException e) {}
_image = new BufferedImage(loadedImage.getWidth(null),
loadedImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = _image.createGraphics();

然后在调用
WritableRaster raster = _image.getRaster();
int[] pixels = new int[3];
raster.getPixel(x,y,pixels);
其中xy为某点的相对坐标
然后pixels中就是这个点的rgb值
没有积分的私聊我 看到消息百分百发给你 1、算法核心: 1、读取图片A,获得其RGB三个通道数据并转换成三个矩阵a1,a2,a3。 2、读取文件B,将其转换成比特流b。 3、遍历b,得到比特b1,b2,b3,b4,b5,b6等等,将b1代替a1第一个元素的最低位,将b2代替a2第一个元素的最低位,将b3代替a3第一个元素的最低位,将b4代替a1第二个元素的最低位,以此类推。 2、具体实现: 1、隐写: 1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用java NIO读取被嵌入的文件,将其转换为byte数组,需要特别指出的是原生方法得到是byte类型的数组,但是算法实现需要更加精细的操作,所以还需要对得到的byte数组进行进一步的转换封装,将其转换成形如10101的数组。例如,读取文件得到byte数组的第一个元素为63,需将63转换为00111111数组。并且保存好文件的长度。 3、按照算法,遍历形如10101的数组 1、如果遍历到的值为0,将矩阵对应的矩阵元素与0xfe进行与运算,将最低位置为0 2、如果遍历到的值为1,将矩阵对应的矩阵元素与0x01进行或运算,将最低位置为1 4、将步骤3得到的经过经过隐写的矩阵写为一张新的图片。 3、读取 1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用隐写步骤3得到的文件长度,遍历图片的像素矩阵,需要特别指出的是因为后续步骤还需要进行进一步的转化,所以这一步是将得到的“100100......”序列每八位封装为一个数组,最终得到一些数组集合,每个数组包含八位二进制序列。 3、将步骤2得到的数组进行转换,例如00111111应该转换为byte类型数值为63的数字,10111111转换为-63。这一步会得到一个byte类型的数组。 4、将步骤3得到的byte类型数组写入文件,需要指出的是写入的文件形式应该和隐写模块步骤二中读入的文件形式一致。 3、程序使用方法 1、安装Java8 2、使用命令行进入jar文件所在目录下,使用命令 java -jar 2016115130.jar 3、安装提示输入嵌入和被嵌入的文件名字,注意路径问题
基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文) 基于JAVA C/S远程监控系统软件的实现 摘 要 近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,其实用性也毋庸质疑。基于JAVA C/S远程监控系统软件突破了空间的限制,使用者不用亲临,在自己的电脑面前就能轻松的实现对被监控端机器的监控。本系统采用Java网络编程和Java图形编程实现。笔者在开发过程中将网络技术与远程监控理论基础相结合,实现了以下功能:能连续获得被监控端机器屏幕变化;实现被监控端硬盘文件的上传、下载;实现对鼠标、键盘的模拟;实现在远程机器上执行任意DOS命令;远程关机、远程重启计算机,方便了用户监视和操作被监控端机器。本系统从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试都严格遵循了软件工程的思想。 关键词:远程监控;Java Robot;屏幕截取;Java Socket 系统需求分析及理论基础 2.1 系统需求分析 2.1.1 系统功能需求 1.连续获得被控端机器屏幕变化。 2.实现被控端硬盘文件的上传、下载。 3.实现对鼠标、键盘的模拟。 4.实现在被控端机器上执行任意DOS命令。 5.远程关机、远程重启计算机。 2.1.2 其他需求 1.系统实用,界面操作简便。 2.被监控端自动隐藏运行。 被监控端将随电脑启动而自动运行,运行时默认无任何可见界面。 2.2 系统开发原理及关键技术 2.2.1 系统开发原理 本系统是利用类java.awt.robot中的屏幕截取和鼠标、键盘自动控制功能,然后加上网络传输功能来完成来完成截屏和远程控制的。 2.2.2 系统运行概述 1.启动被监控端,打开指定的UDP端口号。用于读取命令。 2.被监控端读取命令(命令格式为ordername:port)ordername为命令名字,port为主控端打开的TCP端口。 3.接到主控端连接后,被监控端就对当前用户的桌面采用屏幕截取,然后发送给主控端。依被监控端设计的不同,可以设定屏幕截取的时间间隔,时间间隔短一点就可以获得连续屏幕变化了。 4.主控端在画布上对鼠标、键盘事件进行监听,被监控端重演主控端上的事件 5.主控端和被监控端读取和发送数据,分别来实现文件上传和下载。 6.在被监控端实现DOS命令的执行。 2.2.3 系统的关键技术 系统使用的关键技术就是Java网络编程和Java图形编程。用Java网络编程实现主控端和被监控端的通讯(命令收发、数据传送),用Java图形编程完成主控端控制界面的编写。具体应用如下: 1.实现主控端(服务器)与被监控端(客户端)之间的通讯。 ——用Java Socket来实现。 2.用Java采集事件,封装成消息,用于发送。 ——在主控端机器上采集事件(一般只不过是键盘和鼠标的事件),然后封装成消息类传输到被监控端。 3.在被监控端上重演主控端的动作事件。 ——在被监控端运行client端,接收消息,如果主控端有请求操作的消息,用Robot截下当前屏幕,传给主控端,主控端显示被监控端的屏幕,是一个位图;然后接收在这个位图上的鼠标事件和键盘事件,并把鼠标位置(位图上的坐标换算成对应的屏幕上的坐标)和键值送到被监控端上,在被监控端上重演同样的事件。 2.3 系统的开发平台 JDK1.5.0,Eclipse3.1,Windows XP Professional 2.3.1 Eclipse介绍 Eclipse是一种可扩展的开放源代码IDE。2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周期之中。为了帮助集成开发环境 (IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改

62,615

社区成员

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

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