У меня есть datatable set как itemsource для datagrid (datagrid, показывающий несколько столбцов данных). Все столбцы, кроме одного, имеют текст, последний столбец содержит изображение в виде байтового массива. Столбец изображения привязан к элементу управления изображением, который отображает изображение из выбранной строки в datagrid. Изображения, хранящиеся в данных, могут собираться из дискового пространства или базы данных. В конце концов, все они будут сохранены в базе данных.
У меня есть кнопка, которая должна поворачивать показанное изображение на 90 ° по часовой стрелке и сохранять его снова (в виде байтового массива) в datatable в той же строке (и столбце).
Я пробовал использовать всевозможные способы сделать это, но не повезло. Может кто-то, пожалуйста, помогите мне повернуть и сохранить эту картину?
непроверенный, но должен сделать трюк (возможно, необходимо загрузить изображение в растровое изображение)
using (var memoryStream = new MemoryStream(byteArray))
{
var rotateImage = Image.FromStream(memoryStream);
rotateImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
rotateImage.Save(memoryStream, rotateImage.RawFormat);
byteArray = memoryStream.ToArray();
}
edit: по какой-то причине я забыл сохранить изображение обратно в поток... исправил, что
Он протестирован. Однако я не знаю об Image.Save(). Могут возникнуть проблемы с качеством нового изображения (в зависимости от формата изображения входного изображения)
public static Image GetImageFromDB(byte[] tab)
{
if (tab == null) return null;
try
{
MemoryStream ms = new MemoryStream(tab);
if (ms != null)
{
Image im = Image.FromStream(ms, true);
// or: Image.FromFile(imagepath);
im.RotateFlip(RotateFlipType.Rotate90FlipNone);
ms.Dispose();
im.Save(savedImagePath));
return im;
}
}
catch (Exception)
{
}
return null;
}