(Java)根据存有RGB值的一维数组生成Image(或者BufferedImage)实例(width, height都已经确定)
RT,我把一张图像的像素按从左到右,从上到下的顺序处理得到各个像素点的RGB值,并将这些RGB值存到一个一维数组中,如何根据这个数组生成Image实例。以前实现过,现在忘...
RT,我把一张图像的像素按从左到右,从上到下的顺序处理得到各个像素点的RGB值,并将这些RGB值存到一个一维数组中,如何根据这个数组生成Image实例。以前实现过,现在忘了,希望大家支招!!!
我按各位说的试过都没用,显示出来的图片和原图一点关系都没有。
我现在想知道如何得到8bit灰度图每一个像素的RGB值(0-255)之间,或者如何将8bit灰度图转换为抖动图。虽然现在要求变了有点对不住大家,但是一旦有满意答案,我会再加分的。 展开
我按各位说的试过都没用,显示出来的图片和原图一点关系都没有。
我现在想知道如何得到8bit灰度图每一个像素的RGB值(0-255)之间,或者如何将8bit灰度图转换为抖动图。虽然现在要求变了有点对不住大家,但是一旦有满意答案,我会再加分的。 展开
3个回答
展开全部
BufferedImage方法提供根据rgb数组设置生成图片接口。初始化一个后直接调用方法即可
void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
Sets an array of integer pixels in the default RGB color model (TYPE_INT_ARGB) and default sRGB color space, into a portion of the image data.
具体参看java api。
void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
Sets an array of integer pixels in the default RGB color model (TYPE_INT_ARGB) and default sRGB color space, into a portion of the image data.
具体参看java api。
参考资料: http://download.oracle.com/javase/1.5.0/docs/api/
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BufferedImage bufImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
int[] rgb = new int[width*height];
for(int i=0;i<rgb.length;i++){
rgb[i]=Color.white.getRGB();
}
bufImage.setRGB(0, 0, width, height, rgb/*数组*/, 0, width);
int[] rgb = new int[width*height];
for(int i=0;i<rgb.length;i++){
rgb[i]=Color.white.getRGB();
}
bufImage.setRGB(0, 0, width, height, rgb/*数组*/, 0, width);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package test;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class Rgb {
public List<Integer> getRGB(BufferedImage image, int x, int y) {
List<Integer> rgb = new ArrayList<Integer>();
if (image != null && x <= image.getWidth() && y <= image.getHeight()) {
for (int h = 0; h < y; h++) {
for (int w = 0; w < x; w++) {
//获得w,h坐标的颜色
int pixel = image.getRGB(w, h);
rgb.add(pixel);
}
}
}
return rgb;
}
public static void paint(Integer[] rbg, int width, int height) {
File file = new File("D:/image.jpg");
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) bi.getGraphics();
for (int h = 0; h < height; h++) {
for (int w = 0; w < width; w++) {
int color = rbg[w + width * h];
Color c = new Color(color);
g2.setColor(c);
g2.drawLine(w, h, w + 1, h + 1);
}
}
try {
ImageIO.write(bi, "jpg", file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Rgb r = new Rgb();
File f = new File("D:\\est.jpg");
BufferedImage bi = ImageIO.read(f);
int width = bi.getWidth();
int height = bi.getHeight();
List<Integer> l = null;
Integer[] rbg = new Integer[width * height];
l = r.getRGB(bi, width, height);
for (int i = 0; i < width * height; i++) {
rbg[i] = l.get(i);
}
paint(rbg, width, height);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
上次的程序有点问题 现在已经修改
RE:
我现在想知道如何得到8bit灰度图每一个像素的RGB值(0-255)之间?
关于这个请看public List<Integer> getRGB(BufferedImage image, int x, int y)
通过x,y坐标得到每一点的位色
当然得到不是255的类型 具体可以通过
int r = (rgb & 16711680) >> 16;
int g = (rgb & 65280) >> 8;
int b = (rgb & 255);
转型
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class Rgb {
public List<Integer> getRGB(BufferedImage image, int x, int y) {
List<Integer> rgb = new ArrayList<Integer>();
if (image != null && x <= image.getWidth() && y <= image.getHeight()) {
for (int h = 0; h < y; h++) {
for (int w = 0; w < x; w++) {
//获得w,h坐标的颜色
int pixel = image.getRGB(w, h);
rgb.add(pixel);
}
}
}
return rgb;
}
public static void paint(Integer[] rbg, int width, int height) {
File file = new File("D:/image.jpg");
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) bi.getGraphics();
for (int h = 0; h < height; h++) {
for (int w = 0; w < width; w++) {
int color = rbg[w + width * h];
Color c = new Color(color);
g2.setColor(c);
g2.drawLine(w, h, w + 1, h + 1);
}
}
try {
ImageIO.write(bi, "jpg", file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Rgb r = new Rgb();
File f = new File("D:\\est.jpg");
BufferedImage bi = ImageIO.read(f);
int width = bi.getWidth();
int height = bi.getHeight();
List<Integer> l = null;
Integer[] rbg = new Integer[width * height];
l = r.getRGB(bi, width, height);
for (int i = 0; i < width * height; i++) {
rbg[i] = l.get(i);
}
paint(rbg, width, height);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
上次的程序有点问题 现在已经修改
RE:
我现在想知道如何得到8bit灰度图每一个像素的RGB值(0-255)之间?
关于这个请看public List<Integer> getRGB(BufferedImage image, int x, int y)
通过x,y坐标得到每一点的位色
当然得到不是255的类型 具体可以通过
int r = (rgb & 16711680) >> 16;
int g = (rgb & 65280) >> 8;
int b = (rgb & 255);
转型
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询