PROBLEMA PARA CARHAR UNA IMAGEN GRANDE EN TAMAÑO Y PIXELES

Saludos a todos,
tengo una aplicación (mi primera) un JFrame, que contiene un JSplitPane, que contiene dos JScrollPane (uno al lado del otro).
En el JscrollPane izquierdo de 21.000x20.000 (pixeles) le añadí un Jlabel al cual le cuelgo en su propiedad icon una imagen. Todo lo hice directamente desde la pestaña de Diseño del JFrame a través del Pallete.
El problema es que a pesar del tamaño del JScrollPane solo me acepta imágenes hasta 3750x2820, si trato de insertar imágenes más grandes me las rechaza, no sé si el problema está en los layout horizontal y/o vertical, creo que es algo sencillo, pero soy nuevo en java.
Agradezco la ayuda que puedan brindarme, viguita75@yahoo.es
aquí va el código:

public class ventanaprincipal extends javax.swing.JFrame {
/**
* Creates new form ventanaprincipal
*/
public ventanaprincipal() {
initComponents();

}

/**
* 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.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {

jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane2 = new javax.swing.JScrollPane();
jScrollPane1 = new javax.swing.JScrollPane();
jLabel1 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("ventanaprincipal");
setMinimumSize(new java.awt.Dimension(10000, 10000));
setPreferredSize(new java.awt.Dimension(50000, 21000));

jSplitPane1.setMinimumSize(new java.awt.Dimension(3000, 3000));
jSplitPane1.setName("split1"); // NOI18N
jSplitPane1.setPreferredSize(new java.awt.Dimension(50000, 21000));

jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane2.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane2.setInheritsPopupMenu(true);
jScrollPane2.setMinimumSize(new java.awt.Dimension(3000, 3000));
jScrollPane2.setName("scrolldeforma"); // NOI18N
jScrollPane2.setOpaque(false);
jScrollPane2.setPreferredSize(new java.awt.Dimension(29000, 20000));
jScrollPane2.setVerifyInputWhenFocusTarget(false);

jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setMinimumSize(new java.awt.Dimension(3000, 3000));
jScrollPane1.setName("scrollimagen"); // NOI18N
jScrollPane1.setOpaque(false);
jScrollPane1.setPreferredSize(new java.awt.Dimension(21000, 20000));

jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel1.setLabelFor(jScrollPane1);
jLabel1.setText("jLabel1");
jLabel1.setAlignmentX(0.5F);
jLabel1.setMaximumSize(new java.awt.Dimension(1024, 768));
jLabel1.setMinimumSize(new java.awt.Dimension(100, 50));
jLabel1.setName("labelimagen"); // NOI18N
jLabel1.setPreferredSize(new java.awt.Dimension(1024, 768));
jScrollPane1.setViewportView(jLabel1);
jLabel1.getAccessibleContext().setAccessibleName("labelimagen");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(90, 90, 90)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(20641, 20641, 20641)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(277, 277, 277)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(9929, 9929, 9929)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
);

jSplitPane1.getAccessibleContext().setAccessibleName("split1");
jScrollPane2.getAccessibleContext().setAccessibleName("scrolldeforma");
jScrollPane1.getAccessibleContext().setAccessibleName("scrollimagen");

pack();
}//

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
transformador bizarro = new transformador();
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ventanaprincipal().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
// End of variables declaration

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: imagen grande

 

Tal vez es una limitante del Proyecto Matisse. Si consigo algo de tiempo, echaré un vistazo al código para confirmar esto último.

¿Has intentado hacerlo programáticamente?

 

NUEVO PROBLEMA

tengo el siguiente proyecto:
package matrizbizarra;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.ImageIcon;

/**
*
* @author VICTOR
*/
public class transformador extends JFrame {
//BufferedImage imagenbizarra;
protected static double xpa, xpb, xpc, xpd;
protected static double ypa, ypb, ypc, ypd;
protected static double xproya, xproyb, xproyc, xproyd;
protected static double yproya, yproyb, yproyc, yproyd;
protected static int x2ap,x2bp,x2cp,x2dp;
protected static int y2ap,y2bp,y2cp,y2dp;
protected int sumaRed, sumaGreen, sumaBlue;
protected int marcadori, marcadorj;
protected static double syo;
protected static int col, fila;
static final double tamcuadro = 0.025;
static final double xex = 70;
static final double ylevit = 0;
static final double hsuj = 170;
static final double resol = 40;
static final double alto = 1; //alto original en cmts
static final double ancho = 2; //ancho original, número par en cmts
@SuppressWarnings("FieldMayBeFinal")
protected Polygon poliG; //Polígono de la clase Polygon
//protected javax.swing.JLabel jLabel1;
//protected javax.swing.JScrollPane jScrollPane1;
//protected javax.swing.JSplitPane jSplitPane1;
//protected javax.swing.JScrollPane jScrollPane2;
//private Object jLabel2;
//private Object bizarra;

private ImageIcon imagenP3;
private BufferedImage buffer;
private Color colorpixel = new Color(100,100,100);

public transformador () {
//this.setVisible(true);
//Crea un nuevo polígono vacío
poliG = new Polygon();
xpa = 0;
xpb = 0;
xpc = 0;
xpd = 0;
ypa = 0;
ypb = 0;
ypc = 0;
ypd = 0;
xproya = 0;
xproyb = 0;
xproyc = 0;
xproyd = 0;
yproya = 0;
yproyb = 0;
yproyc = 0;
yproyd = 0;
x2ap = 0;
x2bp = 0;
x2cp = 0;
x2dp = 0;
y2ap = 0;
y2bp = 0;
y2cp = 0;
y2dp = 0;
syo = 300f;
marcadori = 0;
marcadorj = 0;
setTitle( "Splits" );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 14000, 7000 );
//initComponents();

JSplitPane split = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT );
split.setDividerLocation( 5500 );
add( split );

JPanel panel1 = new JPanel();
panel1.setLayout( new BorderLayout() );
// panel1.add( new JLabel( "top panel" ), BorderLayout.NORTH );

JPanel imagenorig = new JPanel();
imagenorig.setPreferredSize( new Dimension( 5354, 4050 ) );
setBackground(Color.white);
//imagenorig.add( new JLabel( "imagenorig" ) );
// Cargamos el gráfico, o imagen , en la panatalla
//Icon imagenP2 = new ImageIcon( "D:\\Penguins 2 (con marca de agua).jpg" );
//JLabel etiqP2 = new JLabel( imagenP2 );
//imagenorig.add( etiqP2 );
panel1.add( new JScrollPane( imagenorig ), BorderLayout.CENTER );

split.setLeftComponent( panel1 );

JPanel panel2 = new JPanel();
panel2.setLayout( new BorderLayout() );
JPanel bizarra = new JPanel();
bizarra.setPreferredSize( new Dimension( 5354, 4050 ) );
setBackground(Color.white);
bizarra.add( new JLabel( "bizarra" ) );
// Cargamos el gráfico, o imagen , en la panatalla
File img = new File( "D:\\Penguins 2 (con marca de agua).jpg" );
BufferedImage buffer = null;
try {
buffer = ImageIO.read(img);
} catch (IOException ex) {
Logger.getLogger(transformador.class.getName()).log(Level.SEVERE, null, ex);
}
ImageIcon imagenP3 = new ImageIcon( buffer );
JLabel etiqP3 = new JLabel( imagenP3 );
bizarra.add( etiqP3 );
JScrollPane scrollpane = new JScrollPane( bizarra );
panel2.add( scrollpane, BorderLayout.CENTER );
// panel2.add( new JLabel( "bottom panel" ) );

split.setRightComponent( panel2 );

setVisible( true );

}

//método para calcular xpa
public static double coordxpa () {
xpa = col*tamcuadro;
return xpa;
}
//método para calcular ypa
public static double coordypa () {
ypa = syo + ylevit + fila*tamcuadro;
return ypa;
}
//método para calcular xproya
public static double coordxproya () {
xproya = (int) Math.rint(((xpa + (xpa-(ancho/2))*(ypa-syo)/(hsuj-(ypa-syo)))*resol)+xex);
return xproya;
}
//método para calcular yproya
public static double coordyproya () {
yproya = (int) Math.rint(((syo*(ypa-syo)/(hsuj-(ypa-syo)))*resol)+30);
return yproya;
}
//método para calcular xproyb
public static double coordxproyb () {
xproyb = (int) Math.rint(((xpa + (xpa-(ancho/2))*((ypa+tamcuadro)-syo)/(hsuj-((ypa+tamcuadro)-syo)))*resol)+xex);
return xproyb;
}
//método para calcular yproyb
public static double coordyproyb () {
yproyb = (int) Math.rint(((syo*((ypa+tamcuadro)-syo)/(hsuj-((ypa+tamcuadro)-syo)))*resol)+30);
return yproyb;
}
//método para calcular xproyc
public static double coordxproyc () {
xproyc = (int) Math.rint((((xpa+tamcuadro) + ((xpa+tamcuadro)-(ancho/2))*((ypa+tamcuadro)-syo)/(hsuj-((ypa+tamcuadro)-syo)))*resol)+xex);
return xproyc;
}
//método para calcular xproyd
public static double coordxproyd () {
xproyd = (int) Math.rint((((xpa+tamcuadro) + ((xpa+tamcuadro)-(ancho/2))*(ypa-syo)/(hsuj-(ypa-syo)))*resol)+xex);
return xproyd;
}
//Métodos para convertir a entero las coordenadas
public static int coordx2ap () {
x2ap = (int) (xproya+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setRoundingMode( RoundingMode.HALF_DOWN);
// truncamos un número
numberFormat.format(x2ap);
System.out.println(x2ap);
return (int) x2ap;
}
public static int coordy2ap () {
y2ap = (int) (yproya+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
//numberFormat.setMaximumFractionDigits(2);
numberFormat.setRoundingMode( RoundingMode.HALF_DOWN);
numberFormat.format(y2ap);
System.out.println(y2ap);
return (int) y2ap;
}
public static int coordx2bp () {
x2bp = (int) (xproyb+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
numberFormat.setRoundingMode( RoundingMode.FLOOR);
numberFormat.format(x2bp);
System.out.println(x2bp);
return (int) x2bp;
}
public static int coordy2bp () {
y2bp = (int) (yproyb+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
//numberFormat.setRoundingMode( RoundingMode.DOWN);
numberFormat.format(y2bp);
System.out.println(y2bp);
return (int) y2bp;
}
public static int coordx2cp () {
x2cp = (int) (xproyc+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
//numberFormat.setRoundingMode( RoundingMode.DOWN);
numberFormat.format(x2cp);
System.out.println(x2cp);
return (int) x2cp;
}
public static int coordx2dp () {
x2dp = (int) (xproyd+0.5);
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
//numberFormat.setRoundingMode( RoundingMode.DOWN);
numberFormat.format(x2dp);
System.out.println(x2dp);
return (int) x2dp;
}
public Color Colorpixel (int column, int row) {
Color coloraux = new Color(0,0,0);
coloraux = new Color(this.buffer.getRGB(column, row));
colorpixel = coloraux;
return coloraux;
}

//Creamos ahora el método paint() que es donde dibujaremos los polígonos.
@Override
public void paint(Graphics g) {

//Toma el Color Blanco
//g2.setColor(Color.WHITE);
//Rellena el fondo de color Blanco
//g2.fillRect(0, 0, 1360, 730);
//col debe ser mayor que ancho/2 y menor que ancho
for (fila=0;fila<((alto/tamcuadro)-1);fila++) {
for (col=0;col<((ancho/tamcuadro)-1);col++) {
coordxpa ();
coordypa ();
System.out.println("xpra="+coordxproya ());
System.out.println("ypra="+coordyproya ());
System.out.println("xprb="+coordxproyb ());
System.out.println("yprb="+coordyproyb ());
System.out.println("xprc="+coordxproyc ());
//System.out.println("yprc="+coordyproyc ());
System.out.println("xprd="+coordxproyd ());
//System.out.println("yprd="+coordyproyd ());
coordx2ap ();
coordy2ap ();
coordx2bp ();
coordy2bp ();
coordx2cp ();
coordx2dp ();

poliG.addPoint(x2ap, y2ap);
poliG.addPoint(x2bp, y2bp);
poliG.addPoint(x2cp, y2bp);
poliG.addPoint(x2dp, y2ap);
//Toma el Color de ls imagen
Colorpixel (col,fila);

g.setColor(colorpixel);
//Asignamos el nuevo valor al BufferedImage
//imageActual.setRGB(i, j,colorSRGB);
g.drawPolygon(poliG);
//Graphics g = bizarra.getGraphics g;
poliG = new Polygon();
}
}
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ventanaprincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
transformador bizarro = new transformador();

}
}

basicamente tengo un Jsplit con dos Jscroll, en uno cargo una imagen, en el otro dibujo una serie de poligonos (pequeñitos) cuyas dimensiones calculo con los metodos descritos, el problema radica en que necesito recorrer la imagen pixel a pixel, tomar el color de cada pixel y colorear cada poligono en el otro Jscroll con dicho color, me da este error:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at matrizbizarra.transformador.Colorpixel(transformador.java:256)
at matrizbizarra.transformador.paint(transformador.java:295)

alguien puede ayudarme a lograr lo que necesito???

gracias a todos los que me ayuden.

VICTOR

Introduction to Computer Graphics

 

Introduction to Computer Graphics: Using Java 2D and 3D

▲ Para cualquiera que esté interesado en programación de Java 2D, este libro será de gran ayuda. Hay una vista previa en Google Books.

Si el idioma es una barrera, también está: Java 2D, Cómo tratar con Java figuras, imágenes y texto en dos dimensiones [PDF]. Pese a que éste último libro no incluye la teoría relacionada con graficación por computadora, no deja de ser un buen recurso.

¡Por si sirve de algo!

~~~

Imagen de paranoid_android

Algunas observaciones

Redefines la variable dentro del método no estas usando la variable de la clase
 

No agregas el panel bizarra al JFrame, para desplegar la imagen.
 
Te doy una liga sobre procesamiento de Imágenes https://processing.org/tutorials/pixels/

método paint

 

Por cierto, no siempre tienes que sobreescribir el método  . También puedes hacer algo como lo siguiente:

 

~~~