tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1171
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mcpd mcpd ist offline Mitglied
    Registriert seit
    Feb 2009
    Beiträge
    16
    Hallo! Habe ein Problem mit der Darstellung großer Bilder in der PictureBox. Bei einer Größe von 5000 x 5000 Pixel und größer bekomme ich eine Exception: "Out Of Memory". Wie gelingt es mir in einer PictureBox Bilder derartiger Größe darzustellen?
    Danke für Eure Hilfe.
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Tritt das Problem erst bei der Anzeige auf oder auch schon beim Laden der Bilder?
    Ansonsten wäre meine Idee das Bild ev. zu Splitten, falls die größe bei behalten werden soll.
    Ev. über das Paint Ereignis mit der Methode DrawImage des Graphics Objektes.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    mcpd mcpd ist offline Mitglied
    Registriert seit
    Feb 2009
    Beiträge
    16
    Zitat Zitat von Spyke Beitrag anzeigen
    Tritt das Problem erst bei der Anzeige auf oder auch schon beim Laden der Bilder?
    Ansonsten wäre meine Idee das Bild ev. zu Splitten, falls die größe bei behalten werden soll.
    Ev. über das Paint Ereignis mit der Methode DrawImage des Graphics Objektes.
    Die Exception wird während des Compilieren ausgelöst. Die Grösse der Karte muss beibehalten werden, da auf dieser Karte Touren gezeichnet werden. Die Karte zu kacheln wäre eine Lösung, aber wenn ich aus einer Karte mehrere Kacheln erstellen muss (ca. 100 Stück) wäre ein Einzeichnen einer Tour bzw. Route für den Anwender nicht intuitiv. Macht mir das .NET Framework einen Strich durch die Rechnug? Sind dort die Grenzen gesetzt?
     

  4. #4
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    WIe während des Compilierens
    Am besten du setzt mal direkt die Quellcode Zeile hier rein bei der die Exception auftritt.

    Und auch beim Kacheln könnte man es dem User so anzeigen lassen also würde er eine Große Karte bearbeiten.
    Änhlich wie map24 oder google maps stell ich mir das vor.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  5. #5
    mcpd mcpd ist offline Mitglied
    Registriert seit
    Feb 2009
    Beiträge
    16
    Zitat Zitat von Spyke Beitrag anzeigen
    WIe während des Compilierens
    Am besten du setzt mal direkt die Quellcode Zeile hier rein bei der die Exception auftritt.

    Und auch beim Kacheln könnte man es dem User so anzeigen lassen also würde er eine Große Karte bearbeiten.
    Änhlich wie map24 oder google maps stell ich mir das vor.
    Es gibt dazu keinen Quellcode. Denn ich platziere auf ein Formular eine PictureBox und über die Eigenschaft "Image" lade ich die Karte. In der Entwurfsansicht ist die Karte zu sehen. Nach dem ich F5 bzw F6 drücke erhalte ich die Exception.

    Wie könnte man diese Funktionalität in C# implementieren (ähnlich map24)?
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zu aller erst.
    Versuch mal das Bild zur Laufzeit in die PictureBox zu laden.
    Ich glaube diese hat extra eine Load Funktion, falls doch nicht einfach so aufrufen
    Code :
    1
    
    pictureBox.Image=new Bitmap(@"C:\meinTest.jpg");

    Zum Splitten
    Ich würde das BIld mit einem Bildbearbeitungsprogramm "zerschneiden".
    Und mir zum Beispiel in einer Xml Datei merken welches Bild an welches gehört.

    Für die Picturebox würde ich als Container/Parent ev. ein Panel verwenden und die Eigenschaft AutoScroll des Panels auf true setzen.

    Die PictureBox mit der Location 0;0 setzen und als Size dein 5000;5000.

    Über das Paint Ereignis der PictureBox würde ich jetzt mittel der Eigenschaft VisibleRectangle des Graphics Objektes mir den sichtbaren Bereich liefern lassen.

    Dann in der Xml nach schauen welche Bilder in diese Region reinpassen und per DrawImage darstellen lassen.

    Und ev. beim Scroll Ereignis des Panel pictureBox.Invalidate aufrufen damit auch wirklich neu gezeichnet wird.

    puh hoffe is verständlich wie ichs mein.

    Ich persönlich würde erstmal die Splittung bevorzugen da dort der Arbeitsspeicher weniger ausgelastet sein müsste.
    Ansonsten Performance mäßig müsste man das ganze einfach testen.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    mcpd mcpd ist offline Mitglied
    Registriert seit
    Feb 2009
    Beiträge
    16
    Vielen Dank für Deine Tipps! Ich werde das mal checken und melde mich bei Erfolg oder Nichterfolg zurück.
     

  8. #8
    flowpow flowpow ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    14
    Hallo,

    wenn ich das richtig sehe, versuchst Du ein ca 750 MB großes Bild zu laden. Kann es sein, dass Dein Arbeitsspeicher das gar nicht hergibt?

    Viele Grüße
    flowpow
     

Ähnliche Themen

  1. Hochauflösende Bilder in PictureBox
    Von Dipsi im Forum .NET Grafik und Sound
    Antworten: 2
    Letzter Beitrag: 10.03.08, 15:04
  2. pictureBox Bilder automatisch ändern
    Von habeKA im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 03.12.07, 20:55
  3. Große Grafiken anzeigen lassen
    Von sh0x im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 09.06.05, 15:02
  4. Bild aus Accessdatenbank in Picturebox oder Image anzeigen
    Von Pherdacil im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 27.05.05, 15:29
  5. Große Bilder einscannen
    Von restfulsilence im Forum Creative Lounge
    Antworten: 8
    Letzter Beitrag: 29.12.04, 18:33