Мне необходимо скопировать часть изображения из bitmap'a в Texture2D. Как скопировать именно часть изображения из Bitmap'a мне известно, однако как сконвертировать это в Texture2D?
Судя по всему, должна подойти адаптация этого ответа:
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 не подойдёт.
Продвижение своими сайтами как стратегия роста и независимости