Ich habe ein Problem. Wenn ich ein OpenGL Screenshot mache und das Bild in iMovie als Greenscreen Overlay einlade, dann sieht es so komisch aus. Bitte einfach mal die Bilder vorher/nachher ansehen.
Dazu benutze ich folgende Routine:
[Java]
int[] nBits = {8, 8, 8};
int[] bOffs = {0, 1, 2};
ByteBuffer pixels;
DataBuffer db;
WritableRaster raster;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel cm = new ComponentColorModel(cs, nBits, false, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);
byte [] byteA=new byte[callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight()*3];
pixels = ByteBuffer.allocateDirect(callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight()*3);
gl.glReadPixels(x, y, callbackLFEngine.getScreenWidth(), callbackLFEngine.getScreenHeight(), GL2.GL_RGB, GL2.GL_UNSIGNED_BYTE, pixels);
pixels.get(byteA);
db = new DataBufferByte(byteA, callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight(), 0);
raster = Raster.createInterleavedRaster(db, callbackLFEngine.getScreenWidth(), callbackLFEngine.getScreenHeight(), callbackLFEngine.getScreenWidth()*3, 3, bOffs, null);
screenshotImage = new BufferedImage(cm, raster, false, null);//new java.util.Hashtable());
// * Flip Image Y Axis *
AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
tx.translate(0, -screenshotImage.getHeight(null));
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
screenshotImage = op.filter(screenshotImage, null);
[/Java]
Weiß jemand was da falsch ist?
Dazu benutze ich folgende Routine:
[Java]
int[] nBits = {8, 8, 8};
int[] bOffs = {0, 1, 2};
ByteBuffer pixels;
DataBuffer db;
WritableRaster raster;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel cm = new ComponentColorModel(cs, nBits, false, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);
byte [] byteA=new byte[callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight()*3];
pixels = ByteBuffer.allocateDirect(callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight()*3);
gl.glReadPixels(x, y, callbackLFEngine.getScreenWidth(), callbackLFEngine.getScreenHeight(), GL2.GL_RGB, GL2.GL_UNSIGNED_BYTE, pixels);
pixels.get(byteA);
db = new DataBufferByte(byteA, callbackLFEngine.getScreenWidth()*callbackLFEngine.getScreenHeight(), 0);
raster = Raster.createInterleavedRaster(db, callbackLFEngine.getScreenWidth(), callbackLFEngine.getScreenHeight(), callbackLFEngine.getScreenWidth()*3, 3, bOffs, null);
screenshotImage = new BufferedImage(cm, raster, false, null);//new java.util.Hashtable());
// * Flip Image Y Axis *
AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
tx.translate(0, -screenshotImage.getHeight(null));
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
screenshotImage = op.filter(screenshotImage, null);
[/Java]
Weiß jemand was da falsch ist?