| |
VB.NET - Ein- und UmsteigerBildervorschau - Bilder verkleinern - Shellandwait | | | Autor: Volker Bunge | Datum: 05.01.13 02:02 |
| Hallo Zusammen,
bin gerade dabei, ein Programm zu schreiben, in denen ich ein Verzeichnis mit Bildern durchsuchen lassen möchte und mir die Bilder als kleine Vorschaubilder anzeigen lassen möchte.
Die Pictureboxen lasse ich per Code in das Form einfügen. Anschließend werden die Bilder geladen und per Zoom automatisch verkleinert. So weit alles bestens. Die Picturebox ist 143 x 205 Pixel groß und lädt JPG-Dateien die eine Größe zwischen 490 - 902 kb groß sind (Das sind erst einmal meine Testbilder).
Baue ich Bildrahmen(z).WaitOnLoad = True ein, dann bricht er mir mit dieser Fehlermeldung ab:
System.OutOfMemoryException wurde nicht behandelt.
HResult=-2147024882
Message=Nicht genügend Arbeitsspeicher.
Source=System.Drawing
StackTrace:
bei System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
bei System.Windows.Forms.PictureBox.Load()
bei System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
bei System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
bei System.Windows.Forms.Control.WmPaint(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext context)
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bei Scannprogramm.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:
Ohne diese Zeile läuft zwar das Programm ohne Fehler durch, doch von meinen 39 Bilder werden nicht alle dagestellt. Es fehlen wahl los immer mal ein paar Bilder.
Die Prozessorbelastung steigt dabei auf ca. 1,5 GB an, was auch den o. g. Abbruch erklärt.
Laden der Bilder erfolgt über Bildrahmen(z).ImageLocation = "Pfad des Bildes"
In Access 2007 habe ich das gleiche Problem. Da helfe ich mir mit einer externen Resizer.exe, die ich über eine Shellandwait Funktion aufrufe.
Leider habe ich für VB 2010 keine passende bzw. funktionierende Routine gefunden, die dass externe Programm aufruft, wartet, bis dieses fertig ist und dann weiter macht.
Auch hier im Forum finde ich keine passende Shellandwait - Funktion für VB 2010.
Habt Ich eine passende Funktion oder gibt es eine andere Möglichkeit, die Bilder Speicherschonender anzeigen zu lassen?
Ich weiss, man soll nicht so viel schreiben, aber damit man mein Problem versteht, habe ich mir gedacht, schreibe mal alles auf.
Vielen Dank
Volker | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|