Шановні колеги! Доброго дня! Підкажіть, як програмно обрізати зображення з picturebox'a? В голову відразу прийшло знімати скріншотом, працює, але дозвіл зображення сильно падає (до розмірів скриншота, відповідно). Потрібно взяти фото з PictureBox'a, відрізати від нього частину (відповідно, не втрачаючи пікселі, як у випадку скриншота), і зберегти цю частину в файл. Сподіваюся на вашу швидку допомогу, тому що у мене ідей немає, а інтернет видає варіанти лише з використанням graphics, який не знаю, як перевести в image / зберегти файл ..
Всім доброго часу доби. Перепрошую якщо не зовсім в тему. Пишу прогу по сортуванню фото за датою зйомки. Отримую список файлів в каталозі, потім перевіряю дату зйомки та переписую в папку з датою (в даному випадку днем зйомки). Проблема полягає в тому що я не можу перемістити файл командою IO.File.move (), видає помилку "файл зайнятий іншим процесом" (Ну тут зрозуміло що процес мій). Підкажіть як мені це реалізувати, не сильно змінюючи мій метод отримання атрібута.vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Private Sub Button2_Click (sender As Object, e As EventArgs) Handles Button2.Click HFolder = Application.StartupPath Dim Photo As Image Const DATE_TAKEN As Integer = H9003 Dim SecFiles () As String = IO.Directory.GetFiles (HFolder, "* .jpg", IO.SearchOption.AllDirectories) 'Отримуємо масив імен Dim Dat (2) As String For Each Phot In SecFiles Photo = Image.FromFile ( Phot) If Photo.PropertyIdList.Contains (DATE_TAKEN) Then Dim DateProp As Imaging.PropertyItem DateProp = Photo.GetPropertyItem (DATE_TAKEN) Dat (0) = Mid (System.Text.Encoding.ASCII.GetString (DateProp.Value), 1, 4) 'рік Dat (1) = Mid (System.Text.Encoding.ASCII.GetString (DateProp.Value), 6, 2)' Місяць Dat (2) = Mid (System.Text.Encoding.ASCII.GetString (DateProp .Value), 9, 2) 'Число Try IO.File.Move (Phot, CrFolder (Dat (2)) + IO.Path.GetFileName (Phot)) Catch ex As Exception End Try End If Next End Sub
Вітаю, колеги. Чесне слово - тестувати не колись. Питання задаю по шляху з рішенням інших завдань. Отже, питання: Розміщення директорії з графікою додатки заздалегідь передбачити не можливо. Тому в додатку, для визначення шляхів, використовуються системні константи. Хто знає - чи спрацює фінт вухами, якщо в поле вивантажується з ресурсів бази даних, як шлях до фото, міститиметься рядок типу: vb.net1 Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) \ Додаток \ мое_фото.джпг? Додано через 16 хвилин щось подумалося, що константи, що передаються у вигляді "рядки" залишаться лише рядками.
Привіт, шановні) Пишу вьювер під свої потреби, але зіткнувся з проблемою швидко закінчується пам'яті ПК. Ось критичні ділянки коду: vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Dim MyFoto As New Bitmap (MyImages (MyCurrentImage - 1)) Dim Orientation As ExifOrientations = ImageOrientation (MyFoto) Select Case Orientation Case ExifOrientations.Unknown'нічего не робимо Case ExifOrientations.TopLeft, ExifOrientations.TopRight, ExifOrientations.BottomLeft, ExifOrientations.LeftTop, ExifOrientations.RightBottom 'нічого не робимо Case ExifOrientations.BottomRight MyFoto.RotateFlip (RotateFlipType.Rotate180FlipNone) Case ExifOrientations.RightTop MyFoto.RotateFlip (RotateFlipType.Rotate90FlipNone) Case ExifOrientations.LeftBottom MyFoto.RotateFlip (RotateFlipType.Rotate270FlipNone) Case Else MsgBox ( "Невідома помилка №6") MyFoto = Nothing Exit Sub End Select OriginImage = MyFoto 'запам'ятовуємо в глобальну змінну типу Image правильно орієнтовану фото pctPic.Invalidate () MyFoto.Dispose () 'MyFoto = Nothing Call ShowInfoOfFoto () У наведеному вище коді, я завантажую фото в змінну MyFoto типу Bitmap, після чого орієнтую фото правильно по тегу. На самому початку я робив "MyFoto = Nothing" і думав що так можна поки у мене не глюканула студія. Гугл сказав що так буває коли бракує пам'яті. Став робити "MyFoto.Dispose ()", але тут інша проблема: в пікчурбоксе спочатку малюється фото, а після з'являється білий фон і на цьому тлі червоні лініями прямокутник і хрест навхрест лінії. Так змінивши параметри проекту (зробивши його тільки для x64) я дізнався що це "Викликано виняток:" System.ArgumentException "в System.Drawing.dll" В фото в пікчурбоксе малюється таким кодом: vb.net1 2 3 4 5 6 7 8 9 10 Private Sub pctPic_Paint (sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles pctPic.Paint If OriginImage Is Nothing Or ImageScale чи не працює програма або їй не відповідає опис. Повідомте будь ласка нам про це, заповнивши просту форму. Спасибо =) Зробити сайт краще