BitmapImage DecodePixelWidth dziwne zachowanie

Występowały pewne problemy z wydajnością podczas wyświetlania dużej liczby obrazów. Odkryłem, że problem polega na tym, że obraz w pełnej rozdzielczości był używany, gdy naprawdę potrzebowałem tylko obrazu o rozmiarze mniejszym niż 1/4. Dodałem linię między BeginInit i EndInit, aby ustawić DecodePixelWidth na 200, która jest maksymalną szerokością, jakiej będę potrzebował w moim układzie. Mój występ nie był już problemem, ale niektóre obrazy są naprawdę małe, zdecydowanie nie zbliżone do szerokości 200 pikseli. Większość obrazów wydawała się wyświetlać poprawnie, i nie wydaje się, aby były jakieś wiersze lub powody, które są zbyt małe i które działają poprawnie. Myślałem, że może to wynikać z różnic w oryginalnych wymiarach obrazów, ale nie było żadnego wzorca wyników. Próbowałem wpaść na szerokość do 600, co pozwoliło obrazom na wyświetlanie się w prawidłowej szerokości 200, ale wtedy cierpi na tym wydajność.

W tym momencie nie jestem nawet pewien, gdzie zacząć szukać, i byłbym naprawdę wdzięczny za kopnięcie we właściwym kierunku.

EDYTUJ: Kilka dodatkowych informacji o obrazach i ich używaniu.

Większość obrazów to około 1000X1500, chociaż niektóre mają wymiary nieparzyste, takie jak 1000x1513. Wszystkie obrazy są w formacie JPEG. Obecnie każdy obraz jest umieszczany w zaprojektowanej przeze mnie niestandardowej kontrolce użytkownika, nic nadzwyczajnego, tylko tło wokół niego z pewnym tekstem. Każdy element sterujący użytkownika jest następnie umieszczany w siatce, we własnym wierszu / kolumnie. Siatka znajduje się wewnątrz przeglądarki scroll, więc użytkownik może przewijać listę. To może nie być najlepszy sposób, aby osiągnąć to, czego szukam, ale to, co wymyśliłem szybko i działa w większości. Z przyjemnością przełączę się na inną metodę wyświetlania, jeśli będzie to łatwiejsze i bardziej zwięzłe niż to, co chcę.

Zamierzonym rezultatem jest aplikacja do przeglądania filmów. Pojawi się przewijana lista filmów, z których każdy będzie reprezentowany jako własna płytka z tytułem, plakatem filmowym, informacją o gatunku, oceną i opisem. Ta lista będzie można sortować na różne elementy. Informacje o filmach są przechowywane w bazie danych sql na innym komputerze. Obrazy są oryginalnie przechowywane na innym komputerze, ale są kopiowane lokalnie w celu zwiększenia wydajności.

EDYCJA: Byłem w stanie rozwiązać problem, nie używając DecodePixelWidth i zamiast tego zapisać kopię obrazu w żądanym rozmiarze, to poprawiło wydajność. Zalecenie Youngjae, by nie używać DecodePixelWidth wraz z wzmianką o użyciu zwirtualizowanej listy, doprowadziło mnie do następującego zestawu artykułów na temat tworzenia wirtualnego panelu zawijania, który powinien rozwiązać inne problemy z wydajnością. Artykuł dotyczy silverlight, ale z tego, co rozumiem, silverlight jest w zasadzie rozwodnioną wersją wpf, jeśli działa w silverlight, powinna działać w wpf. Przekształcenie go na mój użytek nie powinno być zbyt trudne.

Część 1 - MeasureOverride

Część 2 - ArrangeOverride

Część 3 - Animacja

Część 4 - Wirtualizacja

questionAnswers(1)

yourAnswerToTheQuestion