java处理图片,是我的问题还是SUN的问题还是WINDOWS的问题..等高手来解决

liuxiaohui1987 2009-06-25 02:11:12
最近做了给图片处理的程序,图片很简单,400×300,白底黑字,就在图片中间有一个黑字比如讧,想用程序给他加个阴影,但是问题频出,详细问题在程序下、
package com;

import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
/**PNG图片文字加阴影(黑字白底)
* 读取当前PNG的所有像素点,
* 判断rgb是黑色的像素点,
* 在该像素点偏移一定位置改变其像素为灰色(阴影),
* 若阴影能覆盖到黑色像素则不改变此处的像素,
* 把改变完的像素重新画到图片里
*
*/
public class ImageRGB {
public static void main(String args[]) {
File file = new File(
"C://Documents and Settings//Administrator//桌面//253.png");
BufferedImage bi = null;
try {
bi = ImageIO.read(file);
} catch (Exception e) {
e.printStackTrace();
}
int width = bi.getWidth();
int height = bi.getHeight();
int minx = bi.getMinX();
int miny = bi.getMinY();
System.out.println("width=" + width + ",height=" + height + ".");
System.out.println("minx=" + minx + ",miniy=" + miny + ".");
int r, g, b, n = 0;
for (int i = minx; i < width; i++) {
for (int j = miny; j < height; j++) {
int pixel = bi.getRGB(i, j);
r = (pixel & 0xff0000) >> 16;// red
g = (pixel & 0xff00) >> 8;// green
b = (pixel & 0xff);// blue


if (r == 0 && g == 0 && b == 0)
{
// System.out.println("原始的数据i=" + i + ",j=" + j + ":(" + r +
// ","+ g + "," + b + ")");
n++;
int p = bi.getRGB(i + 5, j + 5);
r = (p & 0xff0000) >> 16;// red
g = (p & 0xff00) >> 8;// green
b = (p & 0xff);// blue
if (r ==255&& g ==255 && b ==255)
{
// System.out.println("现在的数据i=" +( i+5 )+ ",j=" + (j+5)+ ":("
// + r + ","+ g + "," + b + ")");
r = 120;
g = 120;
b = 120;
p = (r << 16) | (g << 8) | b;
bi.setRGB(i+5 , j+5, p);
r = (p & 0xff0000) >> 16;// red
g = (p & 0xff00) >> 8;// green
b = (p & 0xff);// blue
System.out.println("现在的数据i=" +( i+5 )+ ",j=" + (j+5)+ ":("
+ r + ","+ g + "," + b + ")");
}
}

}

}
System.out.println(n);
try {
ImageIO.write(bi, "PNG", file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
问题:1,如果原图片是gif格式的,我用windows的画图工具另存为png的,再放到程序里用会出现数组越界异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(ByteInterleavedRaster.java:301)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:871)
at com.ImageRGB.main(ImageRGB.java:45)
如果原图是jpg的,做出来的阴影只是些星星点点的像素点,阴影字的笔画不连贯
如果是png的,做出来的阴影正常。
很迷惑,程序应该是没问题的,不知道是windows的画图另存为的问题?还是什么别的BUG?
2,可能因为讧这个字简单,当把一个笔画比较复杂的字(png的)放进去做的时候还是会出想上面一样的异常,这是为什么?
高手来指点!
谢了。
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxg1127_1 2010-12-01
  • 打赏
  • 举报
回复
因为像素是从0,0坐标开始的,比如一张图片时800x600的,你获取最右边和最下边的像素,只能是0-799~0-599,如果你获取800,600这个坐标点的像素,就越界了
numberOneJava 2009-07-10
  • 打赏
  • 举报
回复
写的好复杂。学习。
JSP是一种如日中天的新型Internet/Intranet开发语言,可以在多种操作系统平台和多种Web服务器下使用。本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也适合具有一定JSP基础的开发人员深入研究使用。 前 言 JSP是SUN公司推出的一种新型的Internet/Intranet开发语言,和前一代Internet/Intranet开发语言(ASP、PHP)相比,JSP在以下几个方面有了重大的突破: 1) 通过JSP的扩展标签库和JavaBeans功能,网站逻辑和网站界面可以完美地分离。 2) 使用Enterprise JavaBeans,可以轻松地在JSP开发的Web中实现事务、安全、会话等等企业级应用所需要的功能。 3) JDBC2.0提供了不同的数据库产品无关的数据库连接方式,更重要的是,数据库连接池提供了一种比普通的数据库连接方式效率高得多的连接方式。 JSP的语法基本上和Java是相同的,有Java基础的读者可以很快学会如何使用JSP,而没有Java语言基础的读者,只要循序渐进地阅读本书,一样可以成为JSP编程的高手。本书主要分为两个部分:第一部分为JSP基础部分。通过这一部分的学习,读者可以掌握JSP的基本使用方法,学会如何使虽JSP来开发一般的中、小型Web应用。这一部分使用常见的Apache Group的Tomcat作为JSP引擎的例子。第二部分为JSP高级应用部分。这一部分主要讲述如何使用JSP进行大型Web应用的开发,为了方便读者学习,本书还专门讲述了SUN公司的J2SDKEE和B趴公司的Webloglc应用服务器的基本使用方法。 JSP可以在各种操作系统和各种Web服务器下使用,其代码基本上不需要任何改动就可以使用。本书为了适应大多数读者的情况,使用了Windows操作系统作为例子,具体的试验平台如下: Windows 2000Advanced Server Apachel.3.14 Intemetln允rmation Server 5.0 Tomcat 3.1 J2SDKEE l.2 BEA Wiblogic 5.1 除了上述平台,书中的代码还在如下平台进行了测试: RedhatUnux 6.1 Apache l.3.12 TOmcat 3.1 BEA Weblogic 4.51 数据库系统主要使用了Microsoft SQL Server 7.0,部分代码使用了MySQL。作者 2000.11
绿色版的 apache-tomcat-6.0.20.rar,无需安装,解压后直接配置JAVA_HOME就可以启动。 步骤:windows-->preferences-->myeclipse-->servers-->tomcat-->tomcat6.0-->点击enable再在tomcat home directery中选择你解压 apache-tomcat-6.0.20.rar文件的目录,就可以了。 tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器.Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能. Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。 Tomcat是稳固的独立的web服务器与Servlet Container,不过,其Web服务器的功能则不如许多更健全的Web服务器完整,如Apache Web服务器(举例来说,Tomcat没有大量的选择性模块)。不过,Tomcat是自由的开源软件,而且有许多高手致力于其发展。
JSP是一种如日中天的新型Internet/Intranet开发语言,可以在多种操作系统平台和多种Web服务器下使用。本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也适合具有一定JSP基础的开发人员深入研究使用。 前 言 JSP是SUN公司推出的一种新型的Internet/Intranet开发语言,和前一代Internet/Intranet开发语言(ASP、PHP)相比,JSP在以下几个方面有了重大的突破: 1) 通过JSP的扩展标签库和JavaBeans功能,网站逻辑和网站界面可以完美地分离。 2) 使用Enterprise JavaBeans,可以轻松地在JSP开发的Web中实现事务、安全、会话等等企业级应用所需要的功能。 3) JDBC2.0提供了不同的数据库产品无关的数据库连接方式,更重要的是,数据库连接池提供了一种比普通的数据库连接方式效率高得多的连接方式。 JSP的语法基本上和Java是相同的,有Java基础的读者可以很快学会如何使用JSP,而没有Java语言基础的读者,只要循序渐进地阅读本书,一样可以成为JSP编程的高手。本书主要分为两个部分:第一部分为JSP基础部分。通过这一部分的学习,读者可以掌握JSP的基本使用方法,学会如何使虽JSP来开发一般的中、小型Web应用。这一部分使用常见的Apache Group的Tomcat作为JSP引擎的例子。第二部分为JSP高级应用部分。这一部分主要讲述如何使用JSP进行大型Web应用的开发,为了方便读者学习,本书还专门讲述了SUN公司的J2SDKEE和B趴公司的Webloglc应用服务器的基本使用方法。 JSP可以在各种操作系统和各种Web服务器下使用,其代码基本上不需要任何改动就可以使用。本书为了适应大多数读者的情况,使用了Windows操作系统作为例子,具体的试验平台如下: Windows 2000Advanced Server Apachel.3.14 Intemetln允rmation Server 5.0 Tomcat 3.1 J2SDKEE l.2 BEA Wiblogic 5.1 除了上述平台,书中的代码还在如下平台进行了测试: RedhatUnux 6.1 Apache l.3.12 TOmcat 3.1 BEA Weblogic 4.51 数据库系统主要使用了Microsoft SQL Server 7.0,部分代码使用了MySQL。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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