Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: 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."

Помогите пожалуйста

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 13.05.06 03:42
А чего ты хотел? ты обращаешься к объекту массива, которого нету. Ибо он у тебя равен Nothing!
Вот смотри..
ReDim Preserve bmpFrame(intFrNr).. тут ты увеличиваешь размер массива, и после этого,ты обязан присвоить этому элементу реальную картинку.. Например так:
bmpFrame(intFrNr) = New Bitmap(......)

А у тебя этого нигде нет... Идем дальше..
Даже если ты это сделаешь,то на следующей строке у тебя снова будет ошибка! Поскольку при при первой же итерации при intFrNr=1 число элементов массива будет равняться 2! И следовательно при выполнении строки Graphics.FromImage(bmpFrame(intFrNr - 1)) ты снова получишь исключение! Т.к. пытаешься получить доступ к объекту с индексом 0, а у тебя его на этот момент НЕТ!
И вообще.. наворотил ты тут явно чего не то, и совсем не так.. Для чего тебе надо хранить объекты Graphics в массиве? Для чего они вообще в таком количестве? Если уж на то пошло,то у Image есть свой объект Graphics, и рисовать анимацию ты можешь непосредственно на нем, не прибегая к битмапам вообще!
А еще лучше будет,если ты объяснишь,что вообще ты пытаешься сделать? Какого рода анимация тебе нужна?

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 13.05.06 10:02
Если рисовать на PictureBox непосредственно, то изображение долго не
проживёт, и постоянно придется его перерисовывать.
А если отрисовать на Bitmap и поставить этот Bitmap значением свойства
Image, изображение будет вечным.

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 13.05.06 10:24
Если рисовать на PictureBox непосредственно, то изображение долго не проживёт

Это все понятно.. непонятно что он вообще пытается сделать..

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 13.05.06 10:59
и потом.. в топике идет речь не о статичном изображении, а об анимации..

Ответить

Номер ответа: 5
Автор ответа:
 SPArk



ICQ: 190153075 

Вопросов: 5
Ответов: 10
 Web-сайт: нету
 Профиль | | #5
Добавлено: 17.05.06 13:30
Спасибо за ответы. Благодаря вам разобрался.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам