Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизФункция CreateBitmap Найти похожие ветки
← →
The_scorpion (2005-12-15 19:36) [0]const W=900;
H=900;
...
TLargefield=array[-200..w,-200..h] of dword;
...
Flat,oldFlat:TLargefield;
...
HandBitMap:=CreateBitmap(w,h,8,3,@flat);
BitBlt(form1.paintbox1.Canvas.Handle,0,0,H,W,HandBitMap,0,0,SRCCOPY );
...
Массив Flat загружен значениями цвета пикселей.
Даннай последовательность функций, почему-то не приводит к появлению изображения в Paintbox"е. Мне кажется что я некоректно вызываю CreateBitmap, но я перебрал все разумные комбинации параметров и ничего не изменилось
Уважаемы мастера подскажите, пожалуйста, как решить данную проблему.
← →
XProger © (2005-12-15 23:07) [1]Почему 8 плоскостей, и 3 бита на пиксель? :)
Одной плоскости и 24(32) бит должно хватить имхо ;)
P.S.
Что побудило тебя так объявить TLargefield?
← →
The_scorpion (2005-12-16 00:29) [2]Вот ляп, я слово planes перевел как "планируется", оказывается это плоскости...
Я думал, что это количество цветов и количество бит для этого цвета, вот и ставил значения $FFFF 16 и $FFFFFFFF 32, неплохо $FFFFFFFF слоев...:)))
Теперь сие выглядит вот так:
HandBitMap:=CreateBitmap(w,h,1,32,@flat);
BitBlt(form1.paintbox1.Canvas.Handle,0,0,H,W,HandBitMap,0,0,SRCCOPY );
Но все равно вывода на экран нет...:(((
З.Ы. "Что побудило?" Жизнь...:)))...Люблю читабельный код.
← →
The_scorpion (2005-12-16 00:46) [3]А вы не знаете другого способа быстрого вывода пикселей (они хранятся в массиве dword) на экран?
← →
MBo © (2005-12-16 08:05) [4]>А вы не знаете другого способа быстрого вывода пикселей (они хранятся в массиве dword) на экран?
SetDIBitsToDevice
← →
icWasya © (2005-12-16 10:21) [5]З.Ы. "Что побудило?" Жизнь
имеется ввиду, почему нижняя граница массива минус двести???
← →
The_scorpion (2005-12-16 11:17) [6]
> имеется ввиду, почему нижняя граница массива минус двести?
> ??
Графический объект имеет возможность перемещаться за границы экрана, на экране он естественно не отображается, но существовать где-то он должен. Вот там и существует. Вроде стандартный прием.
← →
Fay © (2005-12-16 16:13) [7]2 The_scorpion (16.12.05 11:17) [6]
А этот графический объект не может быть нарисован на окне, которое "имеет возможность перемещаться за границы экрана" ?
← →
The_scorpion (2005-12-16 20:12) [8]
> А этот графический объект не может быть нарисован на окне,
> которое "имеет возможность перемещаться за границы экрана"
> ?
Может конечно, но это ЧЕРЕЗВЫЧАЙНО сильно усложнит и замедлит мою программу. Число графических объектов около 1000...каждый независимо перемещается. Предлагаешь создать для все окна? А что станет с памятью со скоростью обработки? Мою программу можно будет только записать на CD и попытаться добросить до ближайший автостоянки...:)))
← →
Fay © (2005-12-16 21:11) [9]2 The_scorpion (16.12.05 20:12) [8]
> Число графических объектов около 1000
Это прекрасно!
> каждый независимо перемещается.
В чём это выражается?
> Предлагаешь создать для все окна?
Не совсем.
> А что станет с памятью со скоростью обработки?
Не знаю. А какая сейчас скорость?
> Мою программу можно будет только записать на CD и
> попытаться добросить до ближайший автостоянки...:)))
Пока ещё рано зарекаться 8)
← →
The_scorpion (2005-12-16 21:25) [10]
> В чём это выражается?
Любой объект может увеличиваться, уменьшаться, поворачиваться, отражаться, объединяться, вычитаться, умножаться...и еще много чего. Другие объекты(не участвующие в операции) при этом пострадать не должны.
> Не знаю. А какая сейчас скорость?
Удовлетворительная, на грани терпения юзера...:))). Слабое место работы(по скорости выполнения) с графикой это вывод на экран, следовательно чем больше окон для вывода тем хуже.
← →
The_scorpion (2005-12-16 22:13) [11]
> >А вы не знаете другого способа быстрого вывода пикселей
> (они хранятся в массиве dword) на экран?
>
> SetDIBitsToDevice
Это функция на экран, что-то не описуемое выводит...:(((
Помогите, пожалуйста, разобраться что тут не так.
mt.bmiHeader.biSize:=sizeof(BITMAPINFOHEADER); ;
mt.bmiHeader.biWidth:=w;
mt.bmiHeader.biHeight:=h;
mt.bmiHeader.biPlanes:=1;
mt.bmiHeader.biBitCount:=32;
mt.bmiHeader.biCompression:=BI_RGB ;
mt.bmiHeader.biSizeImage:=w*h;
mt.bmiHeader.biXPelsPerMeter:=0;
mt.bmiHeader.biYPelsPerMeter:=0;
mt.bmiHeader.biClrUsed:=DIB_RGB_COLORS;
mt.bmiHeader.biClrImportant:=0;
mt.bmiColors[0].rgbBlue:=128;
mt.bmiColors[0].rgbGreen:=128;
mt.bmiColors[0].rgbRed:=128;
mt.bmiColors[0].rgbReserved:=0;
HandBitMap:=SetDIBitsToDevice(form1.paintbox1.canvas.Handle,0,0,h,w,0,0,0,h,@flat,mt,DIB_RGB_COLORS );
HandBitMap:=GetLastError;
← →
XProger © (2005-12-17 00:56) [12]Сначала подумайте над тем что написали в TLargefield ;)
← →
The_scorpion © (2005-12-17 01:06) [13]
> Сначала подумайте над тем что написали в TLargefield ;)
Подумали...целых два раза...:))) ИМХО там все замечательно.
P.S. С функцией SetDIBitsToDevice сам разобрался, все замечательно работает и очень быстро. Вам спасибо за помощь и вечный респект:
> XProger ©
> Fay ©
> MBo ©
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c