我编了这个程序想读入一个图片并转换为灰度图输出保存,但是我转换得到的图形总是上半部分是灰度,下半部分是全黑的,但是我不知道问题出在哪,请大家指教,谢谢。import javax.imageio.*;
import java.awt.image.*;
import java.io.File;
public class readandwrite {
public readandwrite() {
try {
BufferedImage bi;
String currentFileName="C:\\Documents and Settings\\Administrator\\桌面\\my.png";
File file = new File (currentFileName);
bi=ImageIO.read(file);
int height=bi.getHeight();
int width=bi.getWidth();
int[] ImageArray = new int[width*height];
int[] ImageDestination = new int[width*height];
ImageArray = bi.getRGB(0,0,width,height,ImageArray,0,width);
//得到默认的颜色模型
ColorModel colorModel=ColorModel.getRGBdefault();
int i ,j,k,r,g,b;
for(i = 0; i < height;i++)
{
for(j = 0;j < width;j++)
{
//定位像素点
k = i * height+j;
r = colorModel.getRed(ImageArray[k]);
g = colorModel.getGreen(ImageArray[k]);
b = colorModel.getBlue(ImageArray[k]);
//此处可添加对R、G、B值进行调整的代码
int gray=(int)(r*0.3+g*0.59+b*0.11);
r=g=b=gray;//将R、G值左移,并保存RGB值
ImageDestination[k]=gray;}
} // BufferedImage outimage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
bi.setRGB(0,0,width,height,ImageDestination,0,width);
String FileName="C:\\Documents and Settings\\Administrator\\桌面\\gray.png";
File fileout = new File (FileName);
String format = "PNG";
ImageIO.write(bi,format,fileout);//将图片保存为jpeg格式的文件file。也可以保存为jpg格 } catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
readandwrite es=new readandwrite();
}}
import java.awt.image.*;
import java.io.File;
public class readandwrite {
public readandwrite() {
try {
BufferedImage bi;
String currentFileName="C:\\Documents and Settings\\Administrator\\桌面\\my.png";
File file = new File (currentFileName);
bi=ImageIO.read(file);
int height=bi.getHeight();
int width=bi.getWidth();
int[] ImageArray = new int[width*height];
int[] ImageDestination = new int[width*height];
ImageArray = bi.getRGB(0,0,width,height,ImageArray,0,width);
//得到默认的颜色模型
ColorModel colorModel=ColorModel.getRGBdefault();
int i ,j,k,r,g,b;
for(i = 0; i < height;i++)
{
for(j = 0;j < width;j++)
{
//定位像素点
k = i * height+j;
r = colorModel.getRed(ImageArray[k]);
g = colorModel.getGreen(ImageArray[k]);
b = colorModel.getBlue(ImageArray[k]);
//此处可添加对R、G、B值进行调整的代码
int gray=(int)(r*0.3+g*0.59+b*0.11);
r=g=b=gray;//将R、G值左移,并保存RGB值
ImageDestination[k]=gray;}
} // BufferedImage outimage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
bi.setRGB(0,0,width,height,ImageDestination,0,width);
String FileName="C:\\Documents and Settings\\Administrator\\桌面\\gray.png";
File fileout = new File (FileName);
String format = "PNG";
ImageIO.write(bi,format,fileout);//将图片保存为jpeg格式的文件file。也可以保存为jpg格 } catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
readandwrite es=new readandwrite();
}}
for(i = 0; i < height;i++)
{
for(j = 0;j < width;j++)
{
这个循环你没觉得根本i ,j就没什么用?就是这里出的问题。
直接换成
int k = 0;
while(k < width*height)
{
....//your code; k++;
}
就可以了。
楼主试试吧。