Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
1

Сохранение перевернутой картинки в файл

23.08.2014, 18:39. Просмотров 644. Ответов 13
Метки нет (Все метки)

Доброго времени суток. Такая проблема. Работаю в WPF на vb.net. Открываю jpg файл, поворачиваю картинку на 90 градусов. как мне сохранить картинку в текущем положении обратно в файл, не открывая диалогового окна на сохранение.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 18:39
Ответы с готовыми решениями:

Сохранение картинки в файл
Здравствуйте, уважаемые форумчане. Сохраняю сжатую картинку в файл. Вот код:...

Сохранение в txt файл
Как мне переделать код, что бы при сохранении выдавал табло для введения...

Сохранение содержимого DataGridView в файл
Доброго времени суток! Уважаемые форумчане, суть вопроса в следующем: Есть...

Сохранение информации из TextBox в файл
Я только начал учебу и мне нужна ваша помощь. Я создаю игру для курсового...

Сохранение содержимого DataGridView в файл
Здравствуйте! Подскажите, пожалуйста, есть ли способ быстрого сохранения...

13
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
23.08.2014, 19:29 2
mega2411, покажи код, как ты открываешь, и как поворачиваешь.
0
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
23.08.2014, 19:35  [ТС] 3
открываю так
vb.net
1
2
3
4
5
6
7
8
9
10
11
  Dim LB As New ListBox()
 Private Sub OpenFolder_Click(sender As Object, e As RoutedEventArgs) Handles OpenFolder.Click
        Try
            If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
                LB.Items.Clear()
                LB.Items.AddRange(IO.Directory.GetFiles(IO.Path.GetDirectoryName(_File), "*.jpg"))
               
            End If
        Catch ex As Exception
        End Try
    End Sub
Поворачиваю так
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Redo_Click(sender As Object, e As RoutedEventArgs) Handles Redo.Click
        Dim bi As New BitmapImage()
        Dim br As New ImageBrush()
     
        bi.BeginInit()
        bi.UriSource = New Uri(LB.SelectedItem)
        bi.Rotation = Rotation.Rotate90
        bi.EndInit()
        br.ImageSource = bi
 
        Image1.Source = br.ImageSource
    End Sub
0
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
23.08.2014, 19:41 4
mega2411, Сохранить изображение из компонента Image в файл (WPF)
1
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
23.08.2014, 20:08  [ТС] 5
а как произвести удаление файла. Я провожу так
vb.net
1
2
3
4
Dim DelFile As String = LB.SelectedItem
        LB.SelectedIndex += 1
        CreateBitmap()
        System.IO.File.Delete(DelFile)
0
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
23.08.2014, 20:29 6
Ну процедура CreateBitmap() мне мало о чём говорит, а физическое удаление файла правильное, при условии, что переменная DelFile содержит полный путь к файлу.
Ещё можешь проверить наличие файла, чтобы при удалении на исключение не нарваться: System.IO.File.Exists
0
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
23.08.2014, 20:43  [ТС] 7
vb.net
1
2
3
4
5
6
7
8
9
10
11
 Private Function CreateBitmap()
        Dim bitmap As New BitmapImage()
        Dim br As New ImageBrush()
        bitmap.BeginInit()
        bitmap.UriSource = New Uri(LB.SelectedItem)
        bitmap.EndInit()
        br.ImageSource = bitmap
        Image1.Source = br.ImageSource
        Me.Title = IO.Path.GetFileName(LB.SelectedItem)
        Return bitmap
    End Function
при удалении выдает что файл занят другим прцессом

Добавлено через 3 минуты
по поводу сохранения. приведенный пример не работает.
vb.net
1
2
3
4
5
6
7
8
9
10
11
 Private Function savejpeg()
        Try
            Dim stream As New IO.FileStream(savefile.FileName, IO.FileMode.OpenOrCreate)
            Dim encoder As New JpegBitmapEncoder()
            Dim myTextBlock As New Controls.TextBlock()
            encoder.QualityLevel = 30
            encoder.Frames.Add(BitmapFrame.Create(Image1.Source))
            encoder.Save(stream)
        Catch ex As Exception
        End Try
    End Function
на первом Dim проходит, а дальше на окончание функции.
в чем может быть проблема
0
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
24.08.2014, 02:29 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

А что Catch ex As Exception говорит? Поставь там точку останова (breakpoint)
Скорее всего тоже самое:
Цитата Сообщение от mega2411 Посмотреть сообщение
при удалении выдает что файл занят другим прцессом
Щас посмотрю весь код

Добавлено через 1 час 33 минуты
Посмотрел я код.
1) Файл занят другим процессом, потому что, при его загрузке в bitmap As BitmapImage() с помощью bitmap.UriSource = New Uri(LB.SelectedItem), bitmap держит дескриптор на этот файл, и файл получается в открытом состоянии.
Решение:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Private Sub Redo_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Redo.Click
        Dim bi As New BitmapImage()
 
        If ListBox1.SelectedItem Is Nothing Then Exit Sub
 
        Using stream As New IO.FileStream(ListBox1.SelectedItem, IO.FileMode.Open, IO.FileAccess.Read)
            bi.BeginInit()
            bi.CacheOption = BitmapCacheOption.OnLoad
            bi.StreamSource = stream
            bi.Rotation = Rotation.Rotate90
            bi.EndInit()
            bi.Freeze 
        End Using
 
        Image1.Source = bi
    End Sub
2) Ошибка при сохранении файла была по той-же причине, она возникала при попытке перезаписать файл, которой всё ещё открыт bitmap'ом. При изменении способа загрузки изображения, это проблема решилась
Обновление savejpeg:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub savejpeg()
        Using sdbl As New SaveFileDialog
            sdbl.Filter = "jpeg|*.jpg"
            If sdbl.ShowDialog() = Windows.Forms.DialogResult.OK Then
                Using stream As New IO.FileStream(sdbl.FileName, IO.FileMode.Create)
                    Dim encoder As New JpegBitmapEncoder()
                    encoder.Frames.Add(BitmapFrame.Create(Image1.Source))
                    encoder.Save(stream)
                End Using
            End If
        End Using
    End Sub
3) Думаю с удалением файла, у тебя теперь не должно возникнуть проблем.
4) Ещё, я немного переписал процедуру загрузки путей картинок в ListBox, который я поместил на форму для удобства.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub OpenFolder_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles OpenFolder.Click
        Try
            Using dlg As New FolderBrowserDialog
                If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    ListBox1.Items.Clear()
                    For Each s As String In IO.Directory.GetFiles(dlg.SelectedPath, "*.jpg")
                        ListBox1.Items.Add(s)
                    Next
                End If
            End Using
        Catch ex As Exception
        End Try
    End Sub
Добавлено через 12 минут
P.S. Dim br As New ImageBrush() вообще не нужен!!!?
0
Visualist
51 / 51 / 25
Регистрация: 01.02.2014
Сообщений: 201
25.08.2014, 02:16 9
Вот так. Открыть, перевернуть, сохранить.
vb.net
1
2
3
4
5
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But-ton2.Click
        Dim Фото As New Bitmap("Spacescape.JPG")
        Фото.RotateFlip(RotateFlipType.Rotate90FlipNone)         'Повернули по часовой на 90 град
        Фото.Save("Spacescape-1.JPG")                      'Сохранили измененную картинку в файле
End Sub
0
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
25.08.2014, 02:38 10
Visualist, вы WPF с WinForms не перепутали? А если нет, то забыли указать, что для Bitmap необходимо добавить ссылку в проект на System.Drawing, а так-же не сказали как отобразить Bitmap в элементе Image, или предлагаете Bitmap в BitmapImage() по пикселям отрисовывать?
0
Visualist
51 / 51 / 25
Регистрация: 01.02.2014
Сообщений: 201
25.08.2014, 16:45 11
Hemicide, да, перепутал я
0
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
03.09.2014, 12:34  [ТС] 12
Работает сохранение. А как реализовать сохранение не открывая диалогового окна. Т.Е. повернул картинку, нажал кнопку Назад -Вперед, она сохранилась в тот же файл. Т.Е реализовать как в программе Просмотр изображений в Windows
0
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 225
03.09.2014, 13:51 13
mega2411, Проверяй на существование файла с таким-же именем, и в случае успеха, дописывай в путь префикс, типа "_копия" или "_1"
1
mega2411
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 206
18.09.2014, 07:05  [ТС] 14
Hemicide,
Цитата Сообщение от Hemicide Посмотреть сообщение
3) Думаю с удалением файла, у тебя теперь не должно возникнуть проблем.
не получается реализовать
0
18.09.2014, 07:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 07:05

Рисование на picturebox и сохранение в файл
Добрый день, visual basic 2008 задача: рисовать но нажатию клавиши мышки, и...

Сохранение переменных в конфигурационный файл
Существует ли готовое решение, возможно встроенное в VB.NET, для сохранения...

Сохранение данных в XML-файл
Вот недавно отгремела тема про сохранение конфига в ini , но в ней же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru