2011-07-11 11 views
8

Potrzebuję edytować (zwiększać wysokość) obraz w locie. Plik ma w większości rozmiar 5000 * 4000. Widzę, że pamięć strzela do poziomu szczytowego, kiedy tworzę bmp o dużych rozmiarach i wołam metodę Graphics.DrawImage na instancję bmp.Praca z dużymi bitmapami powoduje wyjątek braku pamięci

Jak pozbyć się wyjątku braku pamięci? Czy istnieje sposób pracy z dużymi bitmapy w języku C#?

+1

Czy możesz podać kod? – VMAtm

+1

Jest to problem z pamięcią Sprawdź ten http://stackoverflow.com/questions/5801652/bitmap-while-assigning-height-width-crashes/5802113#5802113 – V4Vendetta

+1

Domyślam się, że masz ten sam problem, co inni, gdy próbujesz wziąć więcej niż GB pamięci dla .dll. Możliwą odpowiedzią może być użycie strumienia i przetwarzanie plików w porcjach. –

Odpowiedz

0

To zależy od ciebie aplikacji specyficznych requeirements, to nie jest bardzo jasne z yuor postu, ale generaly, pracując z dużymi plików multimedialnych (obrazy, dźwięki, filmy) Myślę, że bardzo dobrym rozwiązaniem jest

Memory Mapped Files

Zapisz obraz na dysku w pliku odwzorowanym w pamięci i zmień jego wielkość, mając na dysku, wolną pamięć RAM w jak największym stopniu z wielu danych, które prawdopodobnie nie muszą mieć szybkiego dostępu (w tym momencie co najmniej)

Mam nadzieję, że to pomoże. Pozdrawiam.

+0

to nie jest łatwe do zrobienia w .net –

+0

To jest znacznie łatwiejsze niż wcześniej, proszę mi wierzyć, ponieważ teraz owinąłeś klasę .NET. (tylko dla .NET Framework 4.0) – Tigran

+1

OOM jest * nigdy * spowodowany przez brak pamięci RAM. Bitmapy już korzystają z MMF, dzięki czemu więcej pozwala na szybsze wyczerpywanie pamięci wirtualnej. –

Powiązane problemy