(Java)根据存有RGB值的一维数组生成Image(或者BufferedImage)实例(width, height都已经确定)

RT,我把一张图像的像素按从左到右,从上到下的顺序处理得到各个像素点的RGB值,并将这些RGB值存到一个一维数组中,如何根据这个数组生成Image实例。以前实现过,现在忘... RT,我把一张图像的像素按从左到右,从上到下的顺序处理得到各个像素点的RGB值,并将这些RGB值存到一个一维数组中,如何根据这个数组生成Image实例。以前实现过,现在忘了,希望大家支招!!!
我按各位说的试过都没用,显示出来的图片和原图一点关系都没有。
我现在想知道如何得到8bit灰度图每一个像素的RGB值(0-255)之间,或者如何将8bit灰度图转换为抖动图。虽然现在要求变了有点对不住大家,但是一旦有满意答案,我会再加分的。
展开
 我来答
bellCliff
推荐于2017-12-16 · TA获得超过650个赞
知道小有建树答主
回答量:820
采纳率:0%
帮助的人:613万
展开全部
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。

参考资料: http://download.oracle.com/javase/1.5.0/docs/api/

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tsjguaiguai
2010-10-09 · TA获得超过114个赞
知道答主
回答量:172
采纳率:0%
帮助的人:157万
展开全部
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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风过今夏
推荐于2016-08-22 · 超过15用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
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);
转型
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式