Hallo leute! Der verlorene Sohn lässt sich wieder blicken...
Ich versuche schon seit gefühlten zehn Stunden einen einfachen int[]-array mit argb-Werten (roh) in ein int[]-array mit argb-Werten (aber in BufferedImage gewrapped) umzuwandeln, scheitere bisher jedoch kläglich an dieser ganzen image-Ölraffinerie...
argb-Werte sind jeweils in genau ein Integer verpackt, und müssen lediglich als BufferedImage uminterpretiert werden, damit Graphics.drawImage() das ganze fressen kann.
Kleines kompillierbares Beispiel dazu sieht so aus:
Ich habe mich bemüht, den Vorschlag aus diesem Thread: http://www.java-forum.org/616865-post3.html nachzubauen :rtfm:, aber könnte anscheinend die Lücken "dcm" und "sample" nicht korrekt füllen
KKB schmeißt nämlich folgenden Quatsch:
Woher der verdammte "IntegerInterleavedRaster" auftaucht, ist mir ein Rätsel, bei dem SampleModel steht doch schwarz auf weiß "SinglePixelPacked..." ;(
Ich wäre wirklich äußerst dankbar, wenn mir jemand sagen könnte, was ich das reparieren soll :autsch:
Ich versuche schon seit gefühlten zehn Stunden einen einfachen int[]-array mit argb-Werten (roh) in ein int[]-array mit argb-Werten (aber in BufferedImage gewrapped) umzuwandeln, scheitere bisher jedoch kläglich an dieser ganzen image-Ölraffinerie...
argb-Werte sind jeweils in genau ein Integer verpackt, und müssen lediglich als BufferedImage uminterpretiert werden, damit Graphics.drawImage() das ganze fressen kann.
Kleines kompillierbares Beispiel dazu sieht so aus:
Java:
import java.awt.*;
import java.awt.image.*;
public class BufferedImageGeneration {
public static BufferedImage argbToImage(int[] argb, int w, int h){
ColorModel colorModel = ColorModel.getRGBdefault();
SampleModel sampleModel = new SinglePixelPackedSampleModel(
DataBuffer.TYPE_INT,
w,
h,
new int[]{0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF}
);
DataBuffer buffer = new DataBufferInt(argb, w * h);
WritableRaster raster = Raster.createWritableRaster(sampleModel, buffer, new Point(0,0));
//funzt auch nich:
//WritableRaster raster = Raster.createPackedRaster(buffer, w, h, 32, new Point(0,0));
BufferedImage img = new BufferedImage(colorModel, raster, false, null);
return(img);
}
public static void main(String... _){
int[] argb = new int[4];
BufferedImage img = argbToImage(argb, 2, 2);
}
}
Ich habe mich bemüht, den Vorschlag aus diesem Thread: http://www.java-forum.org/616865-post3.html nachzubauen :rtfm:, aber könnte anscheinend die Lücken "dcm" und "sample" nicht korrekt füllen
KKB schmeißt nämlich folgenden Quatsch:
Code:
Exception in thread "main" java.lang.IllegalArgumentException:
Raster IntegerInterleavedRaster: width = 2 height = 2
#Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0
is incompatible with ColorModel DirectColorModel:
rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000
at java.awt.image.BufferedImage.<init>(Unknown Source)
at BufferedImageGeneration.argbToImage(BufferedImageGeneration.java:16)
at BufferedImageGeneration.main(BufferedImageGeneration.java:22)
Ich wäre wirklich äußerst dankbar, wenn mir jemand sagen könnte, was ich das reparieren soll :autsch:
Zuletzt bearbeitet: