Как скопировать часть изображения из bitmap'а в Texture2D?

502
29 января 2017, 12:03

Мне необходимо скопировать часть изображения из bitmap'a в Texture2D. Как скопировать именно часть изображения из Bitmap'a мне известно, однако как сконвертировать это в Texture2D?

Answer 1

Судя по всему, должна подойти адаптация этого ответа:

using System.Drawing;
using System.Drawing.Imaging;
GraphicsDevice device = ...;
Bitmap bitmap = ...;
Texture2D tex = new Texture2D(device, w, h, 1, TextureUsage.None, SurfaceFormat.Color);
BitmapData data = bitmap.LockBits(
        new Rectangle(startx, starty, w, h), ImageLockMode.ReadOnly, bitmap.PixelFormat);
try
{
    int bpp = Image.GetPixelFormatSize(bitmap.PixelFormat);
    if (bpp != 32)
        thrpw new ArgumentException("ARGB image expected");
    int bufferSize = w * h * (bpp / 8);
    //create data buffer 
    byte[] bytes = new byte[bufferSize];
    // copy bitmap data into buffer
    for (int y = 0; y < h; y++)
        Marshal.Copy(
            data.Scan0 + y * data.Stride,
            bytes,
            y * w, w);
    // copy our buffer to the texture
    tex.SetData(bytes);
}
finally
{
    // unlock the bitmap data
    bitmap.UnlockBits(data);
}

Тут w, h — размеры вашего куска, startx, starty — начальная x- и y-позиция вашего куска.

Обратите внимание, что следующий ответ утверждает, что надо ещё развернуть BGRA в RGBA.

Обновление: вот этот ответ подсказывает, что SurfaceFormat.Color соответствует формату ARGB. Это значит, что картинка с 24 bpp не подойдёт.

READ ALSO
Как отловить изменение ItemsSource в WPF DataGrid после редактирования ячейки

Как отловить изменение ItemsSource в WPF DataGrid после редактирования ячейки

Для WPF DataGrid привязан источник данных ObservableCollection<>Колонки заданы как обычные DataGridTextColumn

916
VK, обработка сообщения

VK, обработка сообщения

Пишу простой бот ВК на С#, отвечающий в конфе от моего имени на фразу "Евгений, погода"Не пойму немного, как отлавливать прием сообщения? Не подскажите...

543
Prism DelegateCommand

Prism DelegateCommand

Добрый день, возникла внезапная проблема, может кто сталкивался

373
Не могу понять, в чем проблема с mysql? [требует правки]

Не могу понять, в чем проблема с mysql? [требует правки]

Есть класс SQLHelper, но ничего неработаетне могу понять в чем дело

403