Mam doświadczenie w rysowaniu zdjęć satelitarnych i wykresów z wieloma gigabajtami. Praca z obrazami o rozmiarze około 55 MB powinna prawdopodobnie działać dobrze nawet bez prób jej optymalizacji. Nie podałeś wystarczająco dużo szczegółów, aby polecić jedną alternatywę względem drugiej, więc przedstawię moją opinię na temat zalet i wad.
Korzystanie okna 2D API będzie najprostsze do wdrożenia i zawsze powinny być wystarczająco szybki, jeśli nie trzeba obracać i po prostu chcą, aby wyświetlić obraz i powiększać i przesuwać wokół. Jeśli potraktujesz to jako jeden duży obraz, wydajność nie będzie tak dobra, gdy zmniejszysz, jeśli rysujesz z półtonem, aby uzyskać ładny, gładki obraz. Dzieje się tak dlatego, że za każdym razem, gdy pobierze, będzie musiał odczytać wszystkie 55 MB obrazu.
Aby obejść ten problem z wydajnością, można utworzyć wiele map bitowych, skutecznie mapując obraz na mip. Podczas zmniejszania możesz wybrać obraz o zmniejszonej rozdzielczości, który jest najbliższy rozdzielczości, którą próbujesz narysować. Jeśli nie są zaznajomieni z MIP-mapping tu jest link Wikipedia:
http://en.wikipedia.org/wiki/Mipmap
Wdrożenie go z DirectX będzie 10x jako trudne. Różne elementy graficzne mają różne maksymalne rozmiary tekstur. Najprawdopodobniej będziesz musiał złamać obraz w wielu teksturach do rysowania, a będziesz musiał także śledzić stany renderowania, wyświetlać matryce itp.
Jeśli jednak używasz DirectX, możesz wdrożyć wiele Korekty zdjęć w czasie rzeczywistym Możesz obracać w czasie rzeczywistym, po prostu dostosowując matryce widoku. Można to zrobić w czasie rzeczywistym, kontrast, jasność, gamma, ostrość i łatwo w pixel shader.
Są dwa inne API, które mogę zasugerować. Jeśli chcesz ograniczyć się do systemu Vista lub nowszego, Direct2D będzie nieco prostszy niż Direct3D. Także jeśli kiedykolwiek będziesz musiał zaimplementować to na platformie non-windows, sugerowałbym użycie OpenGL. Mój obecny projekt jest w Direct3D, ponieważ kilka lat temu, kiedy go uruchomiliśmy, OpenGL pozostało w tyle i nie przewidziałem popularności urządzeń z Androidem. Żałuję teraz, że nie skorzystaliśmy z OpenGL.
Czy jesteś pokazując cały obraz lub tylko jej części. W przypadku korzystania z ScrollViewer, to tylko to, czego potrzebujesz ładuje do pamięci –
@JustinPihony wyświetlania całego obrazu. –
wystarczy pamiętać directx! = Directx. Zależy to również od używanego opakowania bezpośredniego.Zwykle SlimDX lub sharpdx ma lepszą wydajność niż Xna lub Managed DirectX. Ale w sumie nie wydaje mi się, że osiągasz znacznie lepsze wyniki. –