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