SharpDx Сохранить растровое изображение в файл

У меня есть растровое изображение Sharpdx Direct2D1 из цели рендеринга. Я хочу сохранить его в файл как изображение. Это для тестовых целей. Я не уверен, нужно ли мне для этого растровое изображение WIC или как преобразовать эти растровые изображения. Или как получить растровое изображение WIC в первую очередь.

Также я не могу найти простого объяснения, как сохранить это растровое изображение в файл в целом.

Любая помощь приложена.

Изменить:

Сейчас я использую такой подход: http://www.rolandk.de/wp/2013/06/inhalt-der-rendertarget-textur-in-ein-bitmap-kopieren/

Это на немецком языке, но он говорит, что вы должны скопировать ресурс цели рендеринга в промежуточный ресурс, чтобы иметь доступ через процессор. Затем скопируйте содержимое в растровое изображение.

Я пробую этот подход, а затем, наконец, использую bitmap.Save (filename). Но почему-то растровое изображение остается пустым. Возможно, я не смог правильно закодировать файл. Но больше похоже, что я вообще не получаю данные из целевого заднего буфера.


person Jonas Bräuer    schedule 21.11.2017    source источник


Ответы (2)


Если у вас есть изображение в WicBitmap, его очень легко переместить в растровое изображение GDI + и сохранить оттуда:

    var pixelData = new byte[width*height*4];
    wicBitmap.CopyPixels(pixelData, width*4);
    var bmp = new System.Drawing.Bitmap(width, height);
    var bd = bmp.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly,
        System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
    Marshal.Copy(pixelData, 0, bd.Scan0, pixelData.Length);
    bmp.UnlockBits(bd);

Могут быть, а могут и не быть лучшие способы решить эту проблему. Но это тот, который я успешно использовал.

person Dan Byström    schedule 21.11.2017

На вопрос отвечает Дэн Бисром, если у вас есть wicBitmap, а затем просто скопируйте данные в растровое изображение gdi.

Я решил свою конкретную проблему с помощью ссылки, которую я разместил в части редактирования. Я не использовал wic или что-то еще, потому что, возможно, это был совершенно неправильный подход к моей проблеме.

Вопрос, возникший в части редактирования, был решен тем, что вместо CopyResource (...) использовался CopySubResource (...) с параметром по умолчанию для копирования всего. Я не уверен, почему CopyResource (...) не работает.

person Jonas Bräuer    schedule 22.11.2017