Я боролся с моим рендерингом ( OutOfMemoryException при создании большого растрового изображения в CF.NET ) некоторое время, и я все еще ищу хороший способ исправить мои проблемы.
Мой движок создает одно большое растровое изображение (в 2 или 3 раза больше размера экрана) и рисует все на этой поверхности. Затем я рисую это изображение на экране со смещением, позволяя пользователю ОЧЕНЬ плавно прокручивать.
Это прекрасно работает большую часть времени, но некоторые пользователи сталкиваются с исключениями OutOfMemoryException при создании этого большого растрового изображения. Я сделал свою домашнюю работу, и кажется, что это потому, что я создаю зависимую от устройства битовую карту (DDB), а в Windows Mobile все DDB назначаются процессу gwes.exe, как и все другие битмапы других приложений. Если этот процесс gwes.exe занимает более 32M, вы получите это исключение.
Я вижу, что независимые от устройства растровые изображения (DIB) фактически создаются в вашем собственном пространстве процессов, а не назначаются gwes.exe. Так как в моем процессе осталось гораздо больше места, я решил изучить эту возможность.
Но единственный способ найти DIB - это создать растровое изображение из потока, как существующий файл. Я не могу придумать способ создать его с нуля и указать, что я хочу, чтобы он был 1280x240 с 256 цветами.
Кто-нибудь знает, как это можно сделать?