Вопрос: VB.Net Как редактировать bitmap из массива
Добавлено: 13.05.06 03:10
Автор вопроса: SPArk | Web-сайт:нету | ICQ: 190153075
Есть такой код... Цель- создание анимации. Сначала публично продекларировал такие вещи:
Dim bmpFrame() As Bitmap массив битмэпов
Dim GR() As Graphics массив их графики
Dim intFrNr As Integer = 0 Счётчик кадров
Потом я пытаюсь сделать хотя бы 1 первый кадр. Код:
Private Sub NextFrame()
intFrNr += 1
ReDim Preserve bmpFrame(intFrNr)
ReDim Preserve GR(intFrNr)
bmpFrame(intFrNr).SetPixel(10, 10, Color.Black)
GR(intFrNr - 1) = Graphics.FromImage(bmpFrame(intFrNr - 1))
GR(intFrNr - 1).Clear(Color.White)
pic1.Image = bmpFrame(intFrNr - 1)
End Sub
Выделенная строчка- это я закрашиваю один пиксель чёрным цветом, чтобы битмэп не был пустым. Синтаксис везде правильный. Но при исполнении получаю на эту строчку ошибку: "Additional information: Object reference not set to an instance of an object."
А чего ты хотел? ты обращаешься к объекту массива, которого нету. Ибо он у тебя равен Nothing!
Вот смотри..
ReDim Preserve bmpFrame(intFrNr).. тут ты увеличиваешь размер массива, и после этого,ты обязан присвоить этому элементу реальную картинку.. Например так:
bmpFrame(intFrNr) = New Bitmap(......)
А у тебя этого нигде нет... Идем дальше..
Даже если ты это сделаешь,то на следующей строке у тебя снова будет ошибка! Поскольку при при первой же итерации при intFrNr=1 число элементов массива будет равняться 2! И следовательно при выполнении строки Graphics.FromImage(bmpFrame(intFrNr - 1)) ты снова получишь исключение! Т.к. пытаешься получить доступ к объекту с индексом 0, а у тебя его на этот момент НЕТ!
И вообще.. наворотил ты тут явно чего не то, и совсем не так.. Для чего тебе надо хранить объекты Graphics в массиве? Для чего они вообще в таком количестве? Если уж на то пошло,то у Image есть свой объект Graphics, и рисовать анимацию ты можешь непосредственно на нем, не прибегая к битмапам вообще!
А еще лучше будет,если ты объяснишь,что вообще ты пытаешься сделать? Какого рода анимация тебе нужна?
Если рисовать на PictureBox непосредственно, то изображение долго не
проживёт, и постоянно придется его перерисовывать.
А если отрисовать на Bitmap и поставить этот Bitmap значением свойства
Image, изображение будет вечным.