Страница: 1 |
Страница: 1 |
Вопрос: присвоение картинки PictureBox.Image
Добавлено: 21.01.11 13:13
Автор вопроса: Flamberg
Здравствуйте, помогите, кто может.
в процессе выполнения Sub происходит сбой, ошибка не выдается, но процедура завершается и начинается другая. Вот часть кода:
Dim Foto As System.Windows.Forms.PictureBox
Dim Name As String 'имя файла
Dim Namb As String 'номер файла
Dim Tip As String 'расширение
Dim fv As String 'тип 1-фото/2-видео
Dim Zvuk As String 'имя файла со звуком
Dim Ocenka As Short 'Оценка
Dim Redak As Boolean 'Был ли отредактирован
Dim datS As Date 'дата создания
Dim datI As Date 'дата изменения
Dim FotZ As Boolean 'подгружено ли фото
End Structure
Structure Save
Dim Name As String 'имя файла
Dim Tip As String 'расширение
Dim Ocenka As Short 'Оценка
Dim datS As Date 'дата создания
Dim datI As Date 'дата изменения
Dim FotZ As Boolean 'подгружено ли фото
Dim H As Integer
Dim W As Integer
End Structure
Public DB(10000) As Fotogr
Public KolF As Integer 'количество фотовидео в альбоме
Public PAlbom As String 'путь альбома
'фрагмент кода
Dim Fls() As String = System.IO.Directory.GetFiles(PAlbom)
Dim Fl, namF, tpF As String
Dim i As Integer = 0
Dim n As Integer = 0
Dim k As Integer = 0
Dim DBaud(10000) As AudioF
Dim dbTMP(10000) As Save
Dim kTMP As Integer = 0
Dim Ris(10000) As Bitmap
Dim GrfRis(10000) As Graphics
Dim P1 As New Rectangle(550, 10, 150, 130)
Dim P2 As New Rectangle(550, 160, 200, 70)
'Читаем структуру
If System.IO.File.Exists(PAlbom & "\db.fta") Then
If System.IO.File.Exists(PAlbom & "\img.jpg") Then
Dim FotoSav As New Bitmap(PAlbom & "\img.jpg")
FileOpen(1, PAlbom & "\db.fta", OpenMode.Random)
n = 0 : k = 0 : i = 0
Do Until EOF(1)
kTMP = kTMP + 1
FileGet(1, dbTMP(kTMP))
If dbTMP(kTMP).FotZ = True Then
Ris(kTMP) = New Bitmap(dbTMP(kTMP).W, dbTMP(kTMP).H)
GrfRis(kTMP) = Graphics.FromImage(Ris(kTMP))
P1 = New Rectangle(0, 0, dbTMP(kTMP).W, dbTMP(kTMP).H)
P2 = New Rectangle(n, k, dbTMP(kTMP).W, dbTMP(kTMP).H)
GrfRis(kTMP).DrawImage(FotoSav, P1, P2, GraphicsUnit.Pixel)
End If
k = k + 200
If k > 19900 Then
k = 0 : n = n + 200
End If
Loop
FileClose(1)
End If
End If
'сравнение
For i = 1 To KolF
For n = 1 To kTMP
If DB(i).Name = dbTMP(n).Name Then
If DB(i).Tip = dbTMP(n).Tip And _
DB(i).datS = dbTMP(n).datS And _
DB(i).datI = dbTMP(n).datI Then
DB(i).FotZ = dbTMP(n).FotZ
DB(i).Foto.Image = Ris(n) 'При выполнении этой строки Sub завершается, остаток кода не выполняется.
DB(i).Ocenka = dbTMP(n).Ocenka
End If
End If
Next n
Next i
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 21.01.11 13:37
я бы на месте проги нахер бы вылетал в OutOfMemory изза отсутсвия .Dispose или Using, как минимум.
а ошибка изза того, что DB(i).Foto (тип PictureBox) не инициализирована.
А помочь тебе явно нужно с самим кодингом, нежели с ошибками. Сперва нужно освоить List(Of <type>, Using и For Each
Номер ответа: 2
Автор ответа:
Flamberg
Вопросов: 9
Ответов: 10
Профиль | | #2
Добавлено: 21.01.11 13:57
Спасибо.
"B(i).Foto (тип PictureBox) не инициализирована" - странно что отладчик промолчал, программа будто работает (ошибок 0), построчно пришлось ловить место ошибки.
Я на Net месяца 2 пытаюсь работать, раньше только с vb6.
Может еще подскажите возможно ли получать превьюшки картинок пикселей так 200х200, не загружая картинку в полном объеме, для экономии времени выполнения (ms Picture Manager, грузится за секунды, а у меня загрузка 20 картинок идет минуту).
P.S. "освоить List(Of <type>; ), Using и For Each" - где почитать можно?
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 21.01.11 14:28
возможно ли получать превьюшки картинок пикселей так 200х200
В принципе, да
где почитать можно?