![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отрисовка в image [D7]
Kos © (2009-04-03 21:04:00)Подскажите, пожалуйста, как можно отобразить на Image быстро и корректно? Имеется матрица со значениями цветов RGB, известна ширина, высота картинки. С помощью Image.Canvas.Pixels[i,j] долго, а с помощью API функции SetDIBits иногда Canvas белого цвета, глючная функция. Есть другие методы?
Kos (2009-04-23 20:40:00) [1]Приведу пример кода, может подскажет кто, что не так? Вот если размер изображения не превышает размера image, то изображение отображается, если превышает, то image белый, Bitmap пустой. Возможно, надо память выделить под BitMap. Матрица arraycolor заполнена правильно.
BM : TBitmap;
DC : HDC;
HB : HBitmap;
Bi : PBitmapInfo;
arraycolor : array of integer;
BM := TBitmap.Create;
DC:=GetDC(Form1.Handle);
BM.Height := h;
BM.Width := w;
image1.Picture.Bitmap.Height := h;
image1.Picture.Bitmap.Width := w;
HB:= BM.Handle;
GetMem(Bi,sizeof(TBitmapInfoheader));
Bi^.bmiHeader.biSize:= sizeof(bi.bmiHeader);
Bi^.bmiHeader.biWidth:= w;
Bi^.bmiHeader.biHeight:= h;
Bi^.bmiHeader.biPlanes:= 1;
Bi^.bmiHeader.biBitCount:= 32;
Bi^.bmiHeader.biCompression:= BI_RGB;
Bi^.bmiHeader.biSizeImage:= 0;
Bi^.bmiHeader.biClrUsed:= 0;
Bi^.bmiHeader.biClrImportant:= 1;
SetDIBits(DC,HB,0,h,arraycolor,Bi^,DIB_RGB_COLORS);
BM.Canvas.Refresh;
Image1.Picture.Bitmap.Assign(BM);
image1.Invalidate;
KilkennyCat (2009-04-03 21:35:00) [2]Моральный, потому что белывй цвет - цвет траура. В Японии (или Китае, вообщем - там).
Игорь Шевченко (2009-04-03 21:27:00) [3]
> с помощью API функции SetDIBits иногда Canvas белого цвета,
> глючная функция
Надеюсь, Microsoft извещен о том, что сделал глючную функцию и должен возместить моральный ущерб ?
KilkennyCat (2009-04-03 21:17:00) [4]Есть еще статья http://www.delphimaster.ru/articles/pixels/index.html
Игорь Шевченко (2009-04-03 21:11:00) [5]есть. заполнять битмап в памяти и выполнять bitblt. Примерно так работает doublebuffering