Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于int数组创建可写光栅_Java_Image Processing_Raster - Fatal编程技术网

Java 基于int数组创建可写光栅

Java 基于int数组创建可写光栅,java,image-processing,raster,Java,Image Processing,Raster,我需要取一个int数组并将其转换为BufferImage。我真的没有这方面的任何背景,我都是从互联网上学到的,所以我想做以下几点: 从BuffereImage(完成)创建一个数组,将此数组转换为IntBuffer(完成)-(稍后我需要通过IntBuffer对图像执行一些操作),将IntBuffer中更改的值放入新数组(完成),并将此数组转换为WritableRaster。 (如果我对流程的理解不正确,请告诉我) 下面是我处理可写光栅的一行: WritableRaster newRaster= n

我需要取一个int数组并将其转换为BufferImage。我真的没有这方面的任何背景,我都是从互联网上学到的,所以我想做以下几点: 从BuffereImage(完成)创建一个数组,将此数组转换为IntBuffer(完成)-(稍后我需要通过IntBuffer对图像执行一些操作),将IntBuffer中更改的值放入新数组(完成),并将此数组转换为WritableRaster。 (如果我对流程的理解不正确,请告诉我)

下面是我处理可写光栅的一行:

WritableRaster newRaster= newRaster.setPixels(0, 0, width, height, matrix);
Eclipse将此标记为错误,并说“类型不匹配:无法从void转换为WritableRaster”

请帮帮我!我有点迷路了

也为糟糕的英语感到抱歉

编辑: 矩阵:

         int height=img.getHeight();
         int width=img.getWidth();
         int[]matrix=new int[width*height];
我尝试将值插入光栅的代码部分:

    BufferedImage finalImg = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
    WritableRaster newRaster= (WritableRaster)finalImg.getData();
    newRaster.setPixels(0, 0, width, height, matrix);
错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10769
at java.awt.image.SinglePixelPackedSampleModel.setPixels(Unknown Source)
at java.awt.image.WritableRaster.setPixels(Unknown Source)

setPixels返回空值:

public static void setPixels(BufferedImage img,
                         int x, int y, int w, int h, int[] pixels)
因此,您需要创建光栅,然后将像素设置为:

WritableRaster newRaster= WritableRaster.createWritableRaster(…);
newRaster.setPixels(0, 0, width, height, matrix);
你需要把每像素4 int(这取决于颜色模型,4代表ARGB)

int[] matrix = new int[width * height * 4]
在此处查看有关WritableRaster的更多信息-


您可以从
int
数组中创建
可写光栅
和/或
缓冲图像
,如下所示:

int w = 300;
int h = 200;
int[] matrix = new int[w * h];

// ...manipulate the matrix...

DataBufferInt buffer = new DataBufferInt(matrix, matrix.length);

int[] bandMasks = {0xFF0000, 0xFF00, 0xFF, 0xFF000000}; // ARGB (yes, ARGB, as the masks are R, G, B, A always) order
WritableRaster raster = Raster.createPackedRaster(buffer, w, h, w, bandMasks, null);

System.out.println("raster: " + raster);

ColorModel cm = ColorModel.getRGBdefault();
BufferedImage image = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null);

System.err.println("image: " + image);
ColorModel cm=ColorModel.getRGBdefault();
int w=300;
int h=200;
WritableRaster raster=cm.createCompatibleWritableRaster(w,h);
DataBufferInt buffer=(DataBufferInt)raster.getDataBuffer();
int[]bufferData=buffer.getData();
int[]数组=新int[2400];
随机=新随机();
对于(int i=0;i<2400;i++){
数组[i]=random.nextInt(2);
}
System.arraycopy(数组,0,bufferData,0,(array.length
检查语法,都错了。所有的过程或者我是如何创建光栅的?你为什么认为
setPixels()
返回一个
WritableRaster
?它不返回。那么,我需要创建一个WritableRaster的具体步骤是什么?以及我以后在It中如何设置int值?如果您能很快向我解释一下,那就太好了。首先感谢您的帮助!下面是我尝试执行您所说的操作的几行代码,您能告诉我这里有什么问题吗?IntBuffer数据=IntBuffer.wrap(矩阵);data.put(0,69);data.rewind();点坐标=新点(0,0);SampleModel样本=img.getSampleModel();WritableRaster newRaster=WritableRaster.createWritableRaster(样本,坐标);newRaster.setPixels(0,0,宽度,高度,矩阵);它说数组超出范围,我认为这与SampleModel有关,但我不知道如何使用Put输入任何值来创建它。谢谢你,img有哪种类型?你从哪里得到了宽度和高度?另外,请看这里的第一个答案:我将查看链接…我想问你的问题-img是一个缓冲图像,我用t得到的宽度和高度他使用img.getHeight/width();矩阵大小是height*width,正如他们所建议的那样,这一行也有相同的问题:newRaster.setPixels(0,0,width,height,matrix);“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException”“”“我只是不明白问题出在哪里他需要一个二进制图像。OPs示例显式使用RGB,从未提到二进制。你怎么知道他想要二进制的?他在评论中说的很真实。在对问题进行编辑以反映这一要求之前,这是一个完全可以接受的答案。2400因为4*高度*宽度
    ColorModel cm = ColorModel.getRGBdefault();
    int w = 300;
    int h = 200;
    WritableRaster raster = cm.createCompatibleWritableRaster(w, h);
    DataBufferInt buffer = (DataBufferInt) raster.getDataBuffer();
    int[] bufferData = buffer.getData();
    int[] array = new int[2400];
    Random random = new Random();
    for (int i = 0; i < 2400; i++) {
        array[i] = random.nextInt(2);
    }
    System.arraycopy(array, 0, bufferData, 0, (array.length < bufferData.length ? array.length : bufferData.length));
    BufferedImage image = new BufferedImage(cm, raster, false, null);
    FileOutputStream fos = new FileOutputStream("D:\\abc\\OCR\\" + "LearningRaster" + ".png");
    ImageIO.write(image, "PNG", fos);
    fos.close();