tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Masterclavat
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1258
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    frögli frögli ist offline Grünschnabel
    Registriert seit
    Dec 2010
    Beiträge
    3
    Salü alle zusammen

    Habe folgende CodeZeilen:

    Dim imageStream As MemoryStream = New MemoryStream(image)
    Dim sourceImage As Bitmap = CType (Bitmap.FromStream (imageStream), Bitmap)

    Die zweite davon produziert die Fehlermeldung zu wenig Arbeitsspeicher. Das Bild welches daher kommt, hat eine Grösse von 4MB.
    Was muss ich machen um diesen Fehler zu umgehen? Ein 4MB Bild kann doch nicht den Arbeitsspeicher sprengen, oder doch?


    Vielen lieben Dank für Hinweise
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Du kannst das Bitmap auch direkt aus einem Image erstellen, ohne MemoryStream:
    Code vbnet:
    1
    
    Dim sourceImage As Bitmap = New Bitmap(image)
    Vielleicht funktioniert das besser.

    EDIT: Ich finde die FromStream-Methode in der MSDN gar nicht. Ist Bitmap bei dir ein System.Drawing.Bitmap?
    Geändert von Shakie (07.12.10 um 10:56 Uhr)
     

  3. #3
    Masterclavat Masterclavat ist offline Mitglied Brokat
    Registriert seit
    Oct 2007
    Beiträge
    325
    Zitat Zitat von Shakie Beitrag anzeigen
    EDIT: Ich finde die FromStream-Methode in der MSDN gar nicht. Ist Bitmap bei dir ein System.Drawing.Bitmap?
    Die FromStream-Methode ist von System.Drawing.Image geerbt.
    Shakie bedankt sich. 

  4. #4
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    1. Verwendest du ein Format, welches unterstützt wird?
    2. Ist dein Image komprimiert? Wenn ja, dann kann es schnell mal sein, dass die wahre Imagegröße bei 80 MB+ liegt
    3. Musst du einen MemoryStream verwenden? Wäre Bitmap.FromFile nicht ausreichend?
     

  5. #5
    frögli frögli ist offline Grünschnabel
    Registriert seit
    Dec 2010
    Beiträge
    3
    Salü Norbert, salü Shakie und salü Masterdavat

    Vielen Dank für Eure Beiträge. In der zwischenzeit habe ich den Code im Projekt soweit reduziert, dass ich nur noch drei Zeilen habe, welche das Problem illustrieren.

    Den Stream verwende ich, weil das Bild am Schluss aus einer Datenbank kommt. Der folgende Code ist auf D:\ programmiert, weil mir das am schnellsten gelaufen ist. Klar, in real geht das nicht.

    Thearsheim ist 4MB gross. Andere Bilder, die viel grösser sind, funktionieren.
    Hat jemand eine Idee, was das sein könnte, dieser MemoryOverflow bei Bild = New Bitmap(sr.BaseStream)?

    Das gleiche Problem bekomme ich auch wenn ich Dim Bild2 = new Bitmap("D:\testimage/THIERSHEIM.jpg") programmiere.
    Somit lässt sich das Problem in einem Einzeiler darstellen.

    Vielen lieben Dank für jegliche Hinweise.



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim bildPfad As String
    Dim vBildName As String
    Dim sr As StreamReader
    Dim Bild1 As Bitmap
    Dim Bild2 As Bitmap
    Dim rGuid As Guid

    'Für Bild 1
    bildPfad = "D:/testimage/B_Hofmann_Natursteinhandel.JPG"
    Bild2 = New Bitmap(bildPfad)

    sr = New StreamReader(bildPfad) '<-- Zeile geht
    Bild1 = New Bitmap(sr.BaseStream)

    rGuid = Guid.NewGuid()
    vBildName = "D:/testimage/TestBild_" + rGuid.ToString() + ".jpg"
    Bild1.Save(vBildName)

    Image1.ImageUrl = vBildName(1)

    'Für Bild 2
    bildPfad = "D:/testimage/THIERSHEIM.jpg"
    Bild2 = New Bitmap(bildPfad)

    sr = New StreamReader(bildPfad)
    Bild1 = New Bitmap(sr.BaseStream) '<-- Hier MemoryOverflow

    rGuid = Guid.NewGuid()
    vBildName = "D:/testimage/TestBild_" + rGuid.ToString() + ".jpg"
    Bild1.Save(vBildName)

    Image2.ImageUrl = vBildName(2)

    End Sub
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Der Fehler tritt also bei einer bestimmten Datei auf und nicht bei allen Dateien, die eine bestimmte Dateigröße überschreiten? Vielleicht ist die Datei kaputt.
     
    hihi = -h²

  7. #7
    frögli frögli ist offline Grünschnabel
    Registriert seit
    Dec 2010
    Beiträge
    3
    Salü Shakie, der Fehler tritt bei einigen Dateien welche so ab etwa 4 MB sind auf. Ich habe mehrere davon. Aber ich habe auch ein Bild mit 6MB das funktioniert.

    Es scheint mir, dass die Zeile Bild1 = New Bitmap(sr.BaseStream) das Bild entpackt und somit über 200MB Ram gebraucht werden. Und je nach Bild und komprimierungsrate ist das halt mehr oder weniger.

    Nun suche ich eine Lösung um das Bild ohne zu entkomprimieren an die Bitmap klasse zu übergeben. Gibt es eventuell sowas?

    Viele Grüsse
     

Ähnliche Themen

  1. Zu wenig Arbeitsspeicher frei
    Von Snakeshit im Forum Cinema 4D
    Antworten: 6
    Letzter Beitrag: 07.04.08, 23:07
  2. zu wenig arbeitsspeicher ?
    Von Massacre im Forum Cinema 4D
    Antworten: 13
    Letzter Beitrag: 29.11.05, 21:09
  3. Druckformat? Zu wenig Arbeitsspeicher?
    Von Sebigf im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 15.07.05, 09:55
  4. Zu wenig Arbeitsspeicher?
    Von robb im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 11.03.05, 10:17
  5. Zu wenig Arbeitsspeicher?
    Von newboy im Forum Hardware
    Antworten: 7
    Letzter Beitrag: 23.02.04, 16:55

Stichworte