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

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

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)方法分别是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9473398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存