[ Java 像素 图像 图像的像素数组 ]

39 views
Skip to first unread message
Message has been deleted

Cooky Lovy

unread,
May 7, 2008, 4:59:25 AM5/7/08
to My Group
1. 在 Java 应用程序中创建图像. 不严重牺牲性能的前提下绘制和着色简单的图形图像
http://www.ibm.com/developerworks/cn/java/j-begjava/index.html

2. String gifName为Gif文件在Jar中的相对路径。
(1)使用了两个静态方法
BufferedImage image=ImageIO.read(ClassLoader.getSystemResourceAsStream(gifName));

或者

Image image=Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(gifName));

这两种方式可以成功地读取gif文件,但是对于gif动画,显示出来地是静态的。

(2)使用其他两个方法
Image image=Toolkit.getDefaultToolkit().getImage(this.getClass.getClassLoader().getResource(gifName));

再这种方式下动画可以正常显示了。

3. 使用JAVA对图片进行效果变换(像素级)
http://www.ismyway.com/Articles/SimpleImageEffect/index.htm

Image image = Toolkit.getDefaultToolkit().getImage(url);
当我们获得了图像后,可以通过java.awt.image.PixelGrabber包中的PixelGrabber方法来将图像中的像素信息完全读取出来,其用法如下:
PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int
off, int scansize)
其中img是要读取的图像,x/y是要读取图像中的左上角坐标,w/h分别是从x/y开始起的距离,其实x,y,w,h就是一个矩形,pix是保存像素的数组,off是读取图像时开始的位置,scansize是指扫描的宽度,一般来说和w相等。[还有其他的构造函数]
int width = image.getWidth();
int height = image.getHeight();
int size = width * height;
int[] pixels = new int[size];
pixelgrabber = new PixelGrabber(image, 0, 0, width, height, pixels, 0, width);
try {
pixelgrabber.grabPixels(); //读取像素入数组
}
catch (InterruptedException _ex) {}
当生成新的像素信息后,可以通过java.awt.image.MemoryImageSource包中的MemoryImageSource(int
w, int h, ColorModel cm, int[] pix, int off, int
scan)方法将像素数组对应到图像,并且可以用newPixels()方法来生成新的图像(具体用法可以参考JAVA API DOC)。

Cooky Lovy

unread,
May 8, 2008, 12:14:01 AM5/8/08
to My Group
// server side
DataOutputStream writer = new DataOutputStream(this.socket.getOutputStream());
Image image = new Image(null,
this.getClass().getResource("/img.jpg").getFile());
ImageData imgData = image.getImageData();
int width = imgData.width;
int height = imgData.height;
writer.writeInt(width);
writer.writeInt(height);
for (int i = 0; i <width; i++) {
for (int j = 0; j < height; j++) {
int pixel = imgData.getPixel(i, j);
writer.writeInt(pixel);
}
}
writer.flush();
writer.close();

// client side
DataInputStream reader = new
DataInputStream(client.getSocket().getInputStream());
int width = reader.readInt();
int height = reader.readInt();
ImageData imageData = new ImageData(width,height,24,new
PaletteData(0xFF0000,0xFF00,0xFF));
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int pixel;
pixel = reader.readInt();
imageData.setPixel(x,y,pixel);
}
}
reader.close();
Image img = new Image(Display.getDefault(),imageData);

Cooky Lovy

unread,
May 8, 2008, 1:24:58 AM5/8/08
to My Group
[ SWT标准窗口小部件工具箱的 Java 二维作图 ]
[ http://blog.csdn.net/jery_lee/archive/2004/10/11/132792.aspx ]

Cooky Lovy

unread,
May 13, 2008, 2:48:33 AM5/13/08
to My Group
[ http://hi.baidu.com/%C7%E5%CB%AE%D0%A1%C1%F7/blog/item/312d61d15b05b3d7562c84de.html
]
# /**
# * 最大值灰度模式。
# * 即取原RGB三色中的最大值作为灰度值。
# */
# /**
# * 浮点平均灰度模式。
# * 即取原RGB三色的比例和作为灰度值。
# * 计算公式为:R*0.3+G*0.59+B*0.11
# */
# /**
# * 绝对平均灰度模式。
# * 即取原RGB三色的和的平均值作为灰度值。
# * 计算公式为:(R+G+B)/3
# */
# /**
# * 得到变换后的RGB值
# * @param pixel 象素的原RGB值
# * @return 根据灰度模型变换后的RGB值
# */
# public int getRGB(int pixel) {
# int gray = getGrayLevel(pixel);
# return (getAlpha(pixel) << 24) + (gray << 16) + (gray << 8) + gray;
# }
Reply all
Reply to author
Forward
0 new messages