Поворот изображения (байтового массива) в datatable

1

У меня есть datatable set как itemsource для datagrid (datagrid, показывающий несколько столбцов данных). Все столбцы, кроме одного, имеют текст, последний столбец содержит изображение в виде байтового массива. Столбец изображения привязан к элементу управления изображением, который отображает изображение из выбранной строки в datagrid. Изображения, хранящиеся в данных, могут собираться из дискового пространства или базы данных. В конце концов, все они будут сохранены в базе данных.

У меня есть кнопка, которая должна поворачивать показанное изображение на 90 ° по часовой стрелке и сохранять его снова (в виде байтового массива) в datatable в той же строке (и столбце).

Я пробовал использовать всевозможные способы сделать это, но не повезло. Может кто-то, пожалуйста, помогите мне повернуть и сохранить эту картину?

  • 9
    Можете ли вы показать нам один из тех способов, которые вы пробовали?
Теги:
wpf
rotation
bytearray

2 ответа

2
Лучший ответ

непроверенный, но должен сделать трюк (возможно, необходимо загрузить изображение в растровое изображение)

using (var memoryStream = new MemoryStream(byteArray))
{
    var rotateImage = Image.FromStream(memoryStream);
    rotateImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
    rotateImage.Save(memoryStream, rotateImage.RawFormat);
    byteArray = memoryStream.ToArray();
}

edit: по какой-то причине я забыл сохранить изображение обратно в поток... исправил, что

  • 1
    Привет, я попытался сделать, как вы советовали, однако, когда я делаю "rotateImage.Save (memoryStream, rotateImage.RawFormat", я получаю исключение, говорящее "Исключение типа 'System.ArugmentNullException' произошло в System.Drawing.dll mais имеет не управляется пользовательским кодом. Значение не может быть нулевым ". Однако я проверил свои переменные, и ни одна из них не является нулевой. У вас есть идея, почему я получаю это исключение? (Извините, если исключение не очень хорошо написано, я перевел это с французского)
  • 0
    @NicolasR извините за поздний ответ ... как указано, код не проверен, но в прошлом у меня были проблемы с классом Image и конкретными файлами (например, поврежденный файл JPEG). Если ваша проблема по-прежнему актуальна, вы можете задать новый вопрос и включить любую дополнительную информацию, которая может быть связана.
Показать ещё 1 комментарий
0

Он протестирован. Однако я не знаю об 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;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню