Der Inhalt eines Image wird nicht vollständig angezeigt

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich erzeuge in einem Programm eine BufferedImage von der Größe height = 11085 Pixel und width = 1056 Pixel. Diese Image wird von dem Programm in einem Fenster mittels ScrollPane auf dem Bildschirm angezeigt. Dieses funktioniert auch soweit bis JViewport.getViewPosition().y + JViewport.getViewSize().height den Wert 8192 überschreitet. Aber diesem Wert wird der Inhalt des Image nicht mehr angezeigt. Es wird nur noch die Backgroundfarbe (Weiß) angezeigt. Man kann aber bis zum Ende des Image weiter scrollen. Eine Exception wird nicht ausgelöst.

Zu Überprüfung habe ich das Image exportiert und es mittels einem anderen Programms angeschaut. Das Image enthält keine weiße Bereiche. Ein separaten Testprogramms, indem ich das Image als BMP-Datei importiere, zeigt das gesamte Image ohne weiße Bereiche an. Hat jemand eine Idee, wordurch der oben beschrieben Effekt ausgelöst wird bzw. welche Ursache hier vorliegen kann?

Die Entwicklungumgebung ist Eclipse unter Windows XP sowie jdk1.6.0.





mfg

fristo
 

Marco13

Top Contributor
Das Bild ist halt schon SEHR groß :shock: Aber mal schnell ist blaue getippt: Hast du schon die drei verschiedenen ScollModi durchprobiert (JViewPort.setScrollMode(int mode)?
Das Bild wird vermutlich in ein JPanel oder so reingezeichnet?
 
G

Guest

Gast
Hallo Marco13,

vielen Dank für Deine Antwort, aber die Größe des Image kann nicht der Grund sein. Wenn ich das Image als BMP-Datei in mein Testprogramm lade, funktioniert auch alles einwandfrei. Nur in meinen Programm, indem das Image erzeugt wird, funktioniert die Darstellung auf dem Bildschirm nicht. Ich kann absolut den Grund hierfür nicht finden. Vielleicht bin ich auch Betriebsblind.

Ich habe mal den Code des Testprogramms beigefügt. In dem Testprogramm hat das Image die Farbe grün. Außderdem sind Markierungen eingefügt, die den Offset vom Anfang des Image angeben. Das Image wird auch zur Kontrolle in eine Datei "TestImage.bmp" geschrieben. Die Image-Datei zeigt genau das Aussehen, wie es das Testprogramm erzeugt hat. Auf dem Bildschirm ist die Darstellung bis zur Adresse JViewport.getViewPosition().y + JViewport.getViewSize().height = 8192 korrekt. Anschließend wird ein Seite (JViewport.getViewSize().height) in Grau angezeigt, der Rest ist grün ohne Markierung. Vielleicht kannst Du das Testprogramm einmal bei Dir laufen lassen und teilst mir das Ergebniss mit und/oder siehst den Fehler.


Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;



public class main
{

  private JFrame      frame       = null;

  private JPanel      contentPane = null;

  private JScrollPane scrollPane  = null;





  /**
   * @param args
   */
  public static void main (String[] args)
  {
    SwingUtilities.invokeLater (new Runnable ()
    {
      public void run ()
      {
        main application = new main ();
        application.getJFrame ()
                   .setVisible (true);
      }
    });
  }





  /**
   * This method initializes frame
   * 
   * @return javax.swing.JFrame
   */
  private JFrame getJFrame ()
  {
    if (frame == null)
    {
      frame = new JFrame ();
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setContentPane (getContentPane ());
      frame.setTitle ("Application");
      

      // ================
      // set default Size
      // ================

      Dimension screenSize = Toolkit.getDefaultToolkit ()
                                    .getScreenSize ();

      Dimension preferredSize = frame.getPreferredSize ();

      Dimension maximizedSize = new Dimension (Math.min (screenSize.width,
                                                         preferredSize.width),
                                               Math.min (screenSize.height,
                                                         preferredSize.height));

      frame.setSize (Math.min (screenSize.width / 3,
                               maximizedSize.width),
                     Math.min (screenSize.height / 3,
                               maximizedSize.height));

      frame.setLocation ((screenSize.width - frame.getSize ().width) / 12,
                         (screenSize.height - frame.getSize ().height) / 12);

      frame.setMaximizedBounds (new Rectangle ((screenSize.width - maximizedSize.width) / 2,
                                               (screenSize.height - maximizedSize.height) / 2,
                                               maximizedSize.width,
                                               maximizedSize.height));

      // frame.setExtendedState (JFrame.MAXIMIZED_BOTH);
      
      System.out.println (scrollPane.getViewport ().getScrollMode ());
    }
    return frame;
  }





  /**
   * This method initializes contentPane
   * 
   * @return javax.swing.JPanel
   */
  private JPanel getContentPane ()
  {
    if (contentPane == null)
    {
      contentPane = new JPanel ();
      contentPane.setLayout (new BorderLayout ());
      contentPane.add (getScrollPane (),
                       BorderLayout.CENTER);
    }
    return contentPane;
  }





  /**
   * This method initializes scrollPane
   * 
   * @return javax.swing.JScrollPane
   */
  private JScrollPane getScrollPane ()
  {
    if (scrollPane == null)
    {
      scrollPane = new JScrollPane (new FImage (),
                                    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                                    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    }
    return scrollPane;
  }
}



Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JComponent;



public class FImage extends JComponent // implements Scrollable
{
  private static String IMAGE_FILE_TYPE = "bmp";

  private static String IMAGE_FILE_NAME = "TestImage" + "." + IMAGE_FILE_TYPE;

  private static int    IMAGE_WIDTH     = 850;

  private static int    IMAGE_HEIGHT    = 12000;

  private static int    IMAGE_TYPE      = BufferedImage.TYPE_3BYTE_BGR;

  private static Color  IMAGE_COLOR     = Color.GREEN;

  private BufferedImage image           = null;





  public FImage ()
  {
    createImage ();

    setPreferredSize (new Dimension (image.getWidth (),
                                     image.getHeight ()));

    saveImage ();
  }





  private void createImage ()
  {
    Graphics2D graphics2D = null;

    try
    {
      image = new BufferedImage (IMAGE_WIDTH,
                                 IMAGE_HEIGHT,
                                 IMAGE_TYPE);
    }
    catch (OutOfMemoryError e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace ();

      System.exit (1);
    }

    graphics2D = image.createGraphics ();

    graphics2D.setColor (IMAGE_COLOR);

    graphics2D.fill (new Rectangle (0,
                                    0,
                                    image.getWidth (),
                                    image.getHeight ()));

    graphics2D.setColor (Color.BLACK);

    // ==============================
    // Markierungen im Image zeichnen
    // ==============================

    int offset = 10;

    for (int i = offset; i < image.getHeight (); i += offset)
    {
      graphics2D.drawLine (40,
                           i,
                           image.getWidth (),
                           i);

      graphics2D.drawString (new Integer (i).toString (),
                             10,
                             i);
    }
  }





  private void saveImage ()
  {
    File file = new File (IMAGE_FILE_NAME);

    try
    {
      ImageIO.write (image,
                     IMAGE_FILE_TYPE,
                     file);
    }
    catch (IOException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace ();

      System.exit (1);
    }
  }





  private void loadImage ()
  {
    File file = new File (IMAGE_FILE_NAME);

    try
    {
      image = ImageIO.read (file);
    }
    catch (IOException e)
    {
      e.printStackTrace ();
    }

  }





  @ Override
  public void paint (Graphics g)
  {
    g.drawImage (image,
                 0,
                 0,
                 null);
  }
}





mfg

fristo
 

Marco13

Top Contributor
Hm. Habs gerade mit Win XP Pro und JDK 1.6.0 b105 getestet - und er zeigt das komplette Bild an. Beim ersten drübersehen habe ich auch keinen Grund gesehen, warum er das NICHT machen sollte - sieht ja soweit alles OK aus (und ist auch nicht sooo kompliziert, dass sich irgendwelche schwer auffindbaren Fehler einschleichen könnten).

Andere Scrollmodi haben wohl nichts gebracht?

Da ich den Fehler nicht nachvollziehen kann, kann ich auch nur "hilflos rumraten". Z.B. mal außerhalb von Eclipse zu starten oder so... Aber inwieweit sowas mit irgendwelchen "tief liegenden" Interna (von JVM über Betriebssystem bis Grafikkartentreiber(???)) zu tun haben kann, weiß ich jetzt auch nicht.

Sorry, aber vielleicht hat ja noch jemand anderes eine Idee...
 
G

Guest

Gast
Hallo Marco13,

vielen Dank für den Test. Ich habe schon seit einiger Zeit den Grafikkartentreiber in Verdacht. Mein eigentliches Entwicklunssystem ist abgeraucht und im Augenblick behelfe ich mich mit einem anderen System. Aber auch mit diesem System funktioniert es jetzt im BACKINGSTORE_SCROLL_MODE. Leider sind die Beschreibungen von Sun nicht immer einfach zu interpretieren und wer liest da immer auch bei den "deprecated" Methoden nach. Nochmals vielen Dank für Deine Unterstützung.




mfg

fristo
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
P AWT Wie kann mein listener den Inhalt eines anderen Textfelds ändern? AWT, Swing, JavaFX & SWT 10
B Inhalt eines ScrolledComposite ändern AWT, Swing, JavaFX & SWT 5
S Swing Inhalt eines Fenster bei Größenänderung anpassen (GroupLayout) AWT, Swing, JavaFX & SWT 2
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
O auf den inhalt eines selektierten Tabs zugreifen AWT, Swing, JavaFX & SWT 5
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
P auf den Inhalt eines Vectors zugreifen AWT, Swing, JavaFX & SWT 8
J Inhalt eines Scrollpane speichern AWT, Swing, JavaFX & SWT 3
N Inhalt eines JEditorPanes ausdrucken AWT, Swing, JavaFX & SWT 5
K aktuellen Inhalt eines JPanels ermitteln AWT, Swing, JavaFX & SWT 3
D Inhalt eines JPanel kopieren AWT, Swing, JavaFX & SWT 7
M Inhalt eines zip-Files in einem JTree darstellen AWT, Swing, JavaFX & SWT 3
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
_user_q Wie den Inhalt vom Spinner auf Integer überprüfen? AWT, Swing, JavaFX & SWT 15
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
H JTabel Inhalt löschen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
ZH1896ZH JavaFX Wie kann ich die Fenstergrösse entsprechend dem Inhalt vergrössern/verkleinern AWT, Swing, JavaFX & SWT 2
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
L JavaFX Pane inklusive Inhalt der Bildschirm Auflösung anpassen AWT, Swing, JavaFX & SWT 13
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
G Menübar anklicken und Inhalt entsprechend wechseln AWT, Swing, JavaFX & SWT 4
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
A BorderLayout "Center" Inhalt wechseln AWT, Swing, JavaFX & SWT 1
D Swing JTable mit Inhalt aus XML-File AWT, Swing, JavaFX & SWT 3
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
E JavaFX JavaFX - MenuItem erstellen aus dem Inhalt einer HashMap AWT, Swing, JavaFX & SWT 1
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
E JavaFX Sehr viel und unterschiedlich Großen Inhalt auf einer "Fläche" ... Umsetzbar ? AWT, Swing, JavaFX & SWT 3
JAVAnnik JavaFX Inhalt der TreeCell nicht einrücken AWT, Swing, JavaFX & SWT 1
F AWT Drucken verschluckt inhalt AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
OnDemand Inhalt des Frames ändern AWT, Swing, JavaFX & SWT 4
S SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row AWT, Swing, JavaFX & SWT 5
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
C Swing Anzeigeproblem mit TableModels abhängig von deren Inhalt AWT, Swing, JavaFX & SWT 10
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
N Swing JCombobox - PopupMenu-Inhalt mit KSKB AWT, Swing, JavaFX & SWT 2
N Swing KomponentenHöhe an html-Inhalt anpassen AWT, Swing, JavaFX & SWT 4
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
C SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer) AWT, Swing, JavaFX & SWT 7
H JFrame Inhalt neu aufbauen? AWT, Swing, JavaFX & SWT 8
M Beim Start von TableEditor Inhalt der Zelle markieren. AWT, Swing, JavaFX & SWT 2
T Inhalt von einem Tab an JTabbedPane größe ausrichten? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JList-Inhalt nach Änderung weg AWT, Swing, JavaFX & SWT 3
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
0 JFrame zeigt Inhalt erst nach vergrößern an AWT, Swing, JavaFX & SWT 3
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
A Swing JScrollPane zeigt keinerlei Inhalt an AWT, Swing, JavaFX & SWT 2
H Swing JPanel Inhalt wird bei verwenden von JPopup gelöscht AWT, Swing, JavaFX & SWT 5
C SWT Textfeld mit festem und variablen Inhalt AWT, Swing, JavaFX & SWT 13
X Swing JTable stets mit gleichem Inhalt öffnen AWT, Swing, JavaFX & SWT 3
O JTable mit Inhalt drucken AWT, Swing, JavaFX & SWT 3
L Inhalt einer table löschen AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
lumo SWT ScrolledComposite maximierter inhalt AWT, Swing, JavaFX & SWT 2
K Tabellen Inhalt ( Zelle ) Modifizieren AWT, Swing, JavaFX & SWT 2
H Swing HTML in einem JEditorPane zeilenweise hinzufügen ohne Inhalt jedes Mal neu zu laden AWT, Swing, JavaFX & SWT 4
D Transparentes JFrame mit inhalt AWT, Swing, JavaFX & SWT 7
S Swing JTabbedPane: Inhalt soll oben links anfangen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen


Oben