Hi Risto,
In
Raster ras = new Raster(
new Point3f(-1.0f,-1.0f,-1.0f),
Raster.RASTER_COLOR,
0,0,
512,512,
new ImageComponent2D(
ImageComponent.FORMAT_RGB,
new BufferedImage(256,256,
BufferedImage.TYPE_INT_RGB)),
null);
The BufferedImage size 256x256 is smaller than the raster
size 512x512 that Java3D is going to read from native so
it crash the underyling library.
To fix this always create an imageComponent will size bigger
than the raster read size.
Actually Java3D can better handle this by throwing Exception,
bug 4784249 -
readRaster crash if imageComponent size pass in is smaller than Raster size
is filed for this.
Good try to crash Java3D !
- Kelvin
------------
Java 3D Team
Sun Microsystems Inc.
Risto Rangel-Kuoppa wrote:
Hi! I was trying to get an image of the rendered frame and an unexpected
exception happened ......
The code is:
/***************/
/***************/
/***************/
/*
* AgentGUI_01.java
*
* Created on November 22, 2002, 12:11 PM
*/
package Proj898.EnvVisualizerAgent;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.*;
import java.util.*;
import javax.vecmath.*;
import javax.media.j3d.PositionInterpolator;
import java.awt.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.image.codec.jpeg.*;
/**
*
* @author rir785
*/
class CapturingCanvas3D extends Canvas3D {
public boolean writeJPEG_;
private int postSwapCount_;
public CapturingCanvas3D(GraphicsConfiguration gc) {
super(gc);
postSwapCount_ = 0;
}
public void postSwap() {
if(writeJPEG_) {
System.out.println("Writing JPEG");
GraphicsContext3D ctx = getGraphicsContext3D();
// The raster components need all be set!
Raster ras = new Raster(
new Point3f(-1.0f,-1.0f,-1.0f),
Raster.RASTER_COLOR,
0,0,
512,512,
new ImageComponent2D(
ImageComponent.FORMAT_RGB,
new BufferedImage(256,256,
BufferedImage.TYPE_INT_RGB)),
null);
ctx.readRaster(ras);
// Now strip out the image info
BufferedImage img = ras.getImage().getImage();
// write that to disk....
try {
FileOutputStream out = new
FileOutputStream("c:\\Capture"+postSwapCount_+".jpg");
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param =
encoder.getDefaultJPEGEncodeParam(img);
param.setQuality(0.9f,false); // 90% qualith JPEG
encoder.setJPEGEncodeParam(param);
encoder.encode(img);
writeJPEG_ = false;
out.close();
} catch ( IOException e ) {
System.out.println("I/O exception!");
}
postSwapCount_++;
}
}
}
public class AgentGUI_01 extends javax.swing.JFrame {
javax.media.j3d.BoundingSphere bounds=new
javax.media.j3d.BoundingSphere(new
javax.vecmath.Point3d(0.0,0.0,0.0),Float.MAX_VALUE);
BranchGroup scene =new BranchGroup();
CapturingCanvas3D canvas3d_C=null;
/** Creates new form AgentGUI_01 */
public AgentGUI_01() {
initComponents();
/*********************/
java.awt.GraphicsConfiguration
config=com.sun.j3d.utils.universe.SimpleUniverse.getPreferredConfigurati
on();
//javax.media.j3d.Canvas3D canvas3d=new
javax.media.j3d.Canvas3D(config);
canvas3d_C=new CapturingCanvas3D(config);
jPanel3D.add("Center",canvas3d_C);
/******************************************/
scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
scene.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
scene.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
//SimpleUniverse is a Convenience Utility class
SimpleUniverse simpleU =new SimpleUniverse(canvas3d_C);
/******************************************/
TransformGroup vpTrans = null;
vpTrans =
simpleU.getViewingPlatform().getViewPlatformTransform();
Vector3f translate=new Vector3f(0.0f,2.0f,2.5f);
Transform3D T3D=new Transform3D();
T3D.setTranslation(translate); // set as translation
T3D.setRotation(new
javax.vecmath.AxisAngle4f(1.0f,0.0f,0.0f,(float)((2*Math.PI)-(Math.PI/7.
0))));
vpTrans.setTransform(T3D); // used for initial position
com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior
keyNavBeh = new
com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior(vpTrans);
keyNavBeh.setSchedulingBounds(bounds);
/******************************************/
scene.addChild(keyNavBeh);
/******************************************/
//scene.addChild(new VisualObject());
scene.addChild(new ColorCube());
/******************************************/
scene.compile();
//This moves the ViewPlatform back a bit so the
//objects in the scene can be viewed.
//simpleU.getViewingPlatform().setNominalViewingTransform();
//simpleU.getViewingPlatform().getViewPlatformTransform();
simpleU.addBranchGraph(scene);
/*********************/
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jPanel3D = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jButtonCaptureImage = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jPanelRenderedImage = new javax.swing.JPanel();
getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("GUI for Agent (With Canvas3D)");
getContentPane().add(jLabel1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 284, 400, -1));
jPanel3D.setLayout(new java.awt.BorderLayout());
jPanel3D.setBorder(new
javax.swing.border.TitledBorder("Canvas3D"));
getContentPane().add(jPanel3D, new
org.netbeans.lib.awtextra.AbsoluteConstraints(81, 0, 319, 284));
jPanel2.setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jButtonCaptureImage.setText("Image");
jButtonCaptureImage.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jButtonCaptureImageMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
jButtonCaptureImageMouseReleased(evt);
}
});
jPanel2.add(jButtonCaptureImage, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 10, 80, -1));
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("\"Name\"");
jPanel2.add(jLabel2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 270, 80, -1));
getContentPane().add(jPanel2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, 284));
jPanelRenderedImage.setBorder(new
javax.swing.border.TitledBorder("Rendered Image"));
getContentPane().add(jPanelRenderedImage, new
org.netbeans.lib.awtextra.AbsoluteConstraints(80, 300, 150, 140));
pack();
}
private void
jButtonCaptureImageMouseReleased(java.awt.event.MouseEvent evt) {
canvas3d_C.writeJPEG_ = true;
canvas3d_C.repaint();
}
private void
jButtonCaptureImageMousePressed(java.awt.event.MouseEvent evt) {
// Add your handling code here:
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new AgentGUI_01().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel3D;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanelRenderedImage;
private javax.swing.JButton jButtonCaptureImage;
// End of variables declaration
}
/***************/
/***************/
/***************/
When I push the jbutton, the output is:
Writing JPEG
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x10007181
Function=[Unknown.]
Library=C:\j2sdk1.4.1\jre\bin\J3D.dll
NOTE: We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.
Current Java thread:
at javax.media.j3d.GraphicsContext3D.readRasterNative(Native
Method)
at
javax.media.j3d.GraphicsContext3D.doReadRaster(GraphicsContext3D.java:23
06)
at
javax.media.j3d.GraphicsContext3D.readRaster(GraphicsContext3D.java:2211
)
at
Proj898.EnvVisualizerAgent.CapturingCanvas3D.postSwap(AgentGUI_01.java:6
0)
at javax.media.j3d.Renderer.doWork(Renderer.java:266)
at javax.media.j3d.J3dThread.run(J3dThread.java:250)
Dynamic libraries:
0x00400000 - 0x00406000 C:\j2sdk1.4.1\jre\bin\java.exe
0x77F80000 - 0x77FFB000 C:\WINNT\System32\ntdll.dll
0x77DB0000 - 0x77E0B000 C:\WINNT\system32\ADVAPI32.dll
0x77E80000 - 0x77F31000 C:\WINNT\system32\KERNEL32.dll
0x77D30000 - 0x77DA1000 C:\WINNT\system32\RPCRT4.dll
0x78000000 - 0x78046000 C:\WINNT\system32\MSVCRT.dll
0x6D330000 - 0x6D45C000 C:\j2sdk1.4.1\jre\bin\client\jvm.dll
0x77E10000 - 0x77E6F000 C:\WINNT\system32\USER32.dll
0x77F40000 - 0x77F79000 C:\WINNT\system32\GDI32.dll
0x77570000 - 0x775A0000 C:\WINNT\System32\WINMM.dll
0x6D1D0000 - 0x6D1D7000 C:\j2sdk1.4.1\jre\bin\hpi.dll
0x6D300000 - 0x6D30D000 C:\j2sdk1.4.1\jre\bin\verify.dll
0x6D210000 - 0x6D229000 C:\j2sdk1.4.1\jre\bin\java.dll
0x6D320000 - 0x6D32D000 C:\j2sdk1.4.1\jre\bin\zip.dll
0x6D000000 - 0x6D0FA000 C:\j2sdk1.4.1\jre\bin\awt.dll
0x77800000 - 0x7781E000 C:\WINNT\System32\WINSPOOL.DRV
0x76620000 - 0x76630000 C:\WINNT\system32\MPR.DLL
0x75E60000 - 0x75E7A000 C:\WINNT\System32\IMM32.dll
0x77A50000 - 0x77B45000 C:\WINNT\system32\ole32.dll
0x6D180000 - 0x6D1D0000 C:\j2sdk1.4.1\jre\bin\fontmanager.dll
0x51000000 - 0x51076000 C:\WINNT\System32\ddraw.dll
0x728A0000 - 0x728A6000 C:\WINNT\System32\DCIMAN32.dll
0x71C10000 - 0x71CC4000 C:\WINNT\System32\D3DIM.DLL
0x60000000 - 0x60045000 C:\WINNT\System32\MSCTF.dll
0x10000000 - 0x10057000 C:\j2sdk1.4.1\jre\bin\J3D.dll
0x0D0E0000 - 0x0D206000 C:\WINNT\System32\d3d8.dll
0x0D210000 - 0x0D215000 C:\WINNT\System32\d3d8thk.dll
0x77820000 - 0x77827000 C:\WINNT\system32\VERSION.dll
0x759B0000 - 0x759B6000 C:\WINNT\system32\LZ32.DLL
0x71710000 - 0x71794000 C:\WINNT\system32\COMCTL32.dll
0x6D230000 - 0x6D235000 C:\j2sdk1.4.1\jre\bin\jawt.dll
0x69000000 - 0x69125000 C:\WINNT\System32\atioglaa.dll
0x0D860000 - 0x0D898000 C:\WINNT\System32\D3DREF8.DLL
0x779B0000 - 0x77A4B000 C:\WINNT\system32\OLEAUT32.DLL
0x77920000 - 0x77943000 C:\WINNT\system32\imagehlp.dll
0x72A00000 - 0x72A2D000 C:\WINNT\system32\DBGHELP.dll
0x13440000 - 0x1344B000 C:\WINNT\System32\PSAPI.DLL
Local Time = Fri Nov 22 21:12:13 2002
Elapsed Time = 9
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Client VM (1.4.1-b21 mixed mode)
#
# An error report file has been saved as hs_err_pid1032.log.
# Please refer to the file for further information.
#
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".