Для переноса изображения из массива в Canvas обычно применяется свойство Canvas->Pixels[x][y].
Но это очень медленный метод. Для ускорения мы создаем объект TBitmap и для доступа к пикселям изображения используем его свойство TBitmap->ScanLine, которое определяет линии изображения. Это уже намного быстрее чем запись в Pixels[x][y].
Получившийся битмап копируем в Canvas при помощи winapi функции BitBlt.
TForm1 *Form1;
TCanvas * gc;
Graphics::TBitmap * bmp;
TCanvas * bmp_c;
unsigned long * buf;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
gc = Form1->Canvas; // получаем ссылку на Canvas формы
bmp = new Graphics::TBitmap(); // создаем TBitmap
bmp->PixelFormat = pf32bit; // формат цвета
bmp->SetSize(640,400); // размер изображения
bmp_c = bmp->Canvas; // ссылка на Canvas Bitmap
//здесь у нас будет тот массив в который мы будем помещать изображение
buf = (unsigned long * )malloc(640 * 400 * sizeof(unsigned long));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete bmp;
free(buf);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
/*
Какие-то действия по получению изображения в массиве buf
*/
unsigned long * a;
for(int y = 0;y < 400;y++){
a =(unsigned long *)bmp->ScanLine[y]; // получим ссылку на текущую линию изображения
for(int x = 0;x < 640;x++)
{
a[x] = buf[x + y * 640]; // копируем значение цвета пикселя из буфера
}
}
BitBlt(gc->Handle,0,0,640,400,bmp_c->Handle,0,0,SRCCOPY);
}