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。
public static final byte[] getPixels(Image img)
{
if (img == null)
return null ;
int width = imggetWidth(null) ;
int height = imggetHeight(null) ;
BufferedImage bi = new BufferedImage(width,height,BufferedImageTYPE_BYTE_GRAY) ;
bigetGraphics()drawImage(img,0,0,null) ;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
ImageIOwrite(bi, "png", bos);
} catch (IOException ex)
{
}
return bostoByteArray() ;
}
startX, startY 是要提取的区域左上角图像的坐标
w, h 是要提取的区域的宽度和高度
rgbArray 是接收像素值的整数数组
offset 是数组中接收第一个像素值的位置的索引。
先定义一个类:其中三个属性,R、G、B
public class ColorVo{
private int r;
private int g;
private int b;
getter & setter
}
然后创建一个 ColorVo 数组
ColorVo[] array = new ColorVo[n];
n表示数组长度。
然后
ColorVo cv = new ColorVo();
cvsetR(1);
cvsetG(2);
cvsetB(3);
array[i] = cv
i表示数组的下表
此时就已经将ColorVo 放入了数组中
通过BufferedImage bi = ImageIOread(new File("路径"));读取路径
再通过文件源,以及坐标获取RGB值
public static int[] getRGB(BufferedImage image, int x, int y) {
int[] rgb = null;
if (image != null && x < imagegetWidth() && y < imagegetHeight()) {
rgb = new int[3];
int pixel = imagegetRGB(x, y);
rgb[0] = (pixel & 0xff0000) >> 16;
rgb[1] = (pixel & 0xff00) >> 8;
rgb[2] = (pixel & 0xff);
}
return rgb;
}
注
image 源图像。
x 图像上指定像素位置的 x 坐标。
y 图像上指定像素位置的 y 坐标。
(要定位25次,慢慢来吧)
黑色的rgb是0,0,0 ,白色的rgb 255, 251, 240(建议用photoshop或者其他软件,先获取这样比较精确),然后再进行逻辑判断就Ok了。
主要包
import javaawtColor;
import javaawtimageBufferedImage;
import javaioFile;
import javaioIOException;
import javaximageioImageIO;
import javaawtBorderLayout;
import javaawtFlowLayout;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawtColor;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJLabel;
import javaxswingJPanel;
import javaxswingJTextField;
public class RGB extends JFrame implements ActionListener{
JTextField t1,t2,t3;
JLabel b1,b2,b3;
JButton jb;
JPanel jp;
public RGB(){
super("RGB");
jp=new JPanel();
b1=new JLabel("R");
b2=new JLabel("G");
b3=new JLabel("B");
t1=new JTextField(3);
t2=new JTextField(3);
t3=new JTextField(3);
jb=new JButton("确定");
jbaddActionListener(this);
jpadd(b1);
jpadd(t1);
jpadd(b2);
jpadd(t2);
jpadd(b3);
jpadd(t3);
jpadd(jb);
jpsetLayout(new FlowLayout());
add(jp,BorderLayoutCENTER);
setSize(200,200);
setResizable(false);
setDefaultCloseOperation(thisDISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(egetSource()getClass()getSimpleName()equals("JButton")){
int r=IntegerparseInt(t1getText());
int g=IntegerparseInt(t2getText());
int b=IntegerparseInt(t3getText());
if(r>=0 && r<=255 && g>=0 && g<=255 && b>=0 && b<=255){
Color c=new Color(r,g,b);
jpsetBackground(c);
}else{
Systemoutprintln("请输入(0-255)的整数!");
}
}
}
public static void main(String[] args) {
new RGB();
}
}
以上就是关于(Java)根据存有RGB值的一维数组生成Image(或者BufferedImage)实例(width, height都已经确定)全部的内容,包括:(Java)根据存有RGB值的一维数组生成Image(或者BufferedImage)实例(width, height都已经确定)、求一个JAVA方法 要求计算RGB32位模式的颜色转换为灰度 小弟对色彩和图形不是很懂。谢谢、Java 里的BufferedImage 的 getRGB( startX, startY, w, h, rgbArray, offset, scansize)方法分别是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)