Мне нужно скачать BMP с JavaScript и отобразить его на экране в Internet Explorer. Во-первых, да, я знаю, что это безумие, я не собираюсь вдаваться в причину, давайте на минутку примем, что img src не работает из-за ограничений безопасности, но запрос ajax с соответствующей аутентификацией в посте будет отодвинуть изображение. Этот пример обходит всю безопасность ради простоты и просто доказывает, что мы можем что-то визуализировать.
Лучшей идеей, которую я мог придумать, было получение потока через ajax, декодирование растрового изображения и затем рендеринг его с помощью canvas. Internet Explorer, очевидно, не поддерживает canvas, но, к счастью, Google предоставил SVG оболочку, называемую excanvas, которую я могу использовать для этого.
Мой код (код рисования работает, декодирование bmp не так уж и много)
http://gist.github.com/614328
Будущая поддержка других изображений, кроме BMP, вполне вероятна, и из-за того, как работает холст, проще всего рисовать пиксели в RGBA. Фактически Texture2D - это класс-оболочка для байтового массива RGBA, а также код для рисования. ByteStream облегчает работу с байтовым массивом, а BitmapDecoder содержит метод для преобразования формата BGR в RGBA texture2d для рисования.
Возможно ли, что байты неправильно переводятся по пути или что-то не так с моей логикой декодирования?
К вашему сведению, я получил спецификацию файла из Википедии:
http://en.wikipedia.org/wiki/BMP_file_format#Bitmap_Information_.28DIB_header.29
Есть идеи, что происходит в логике декодирования или логике рисования, из-за которой мой BMP рисует неправильно?