Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Функция 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 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
1-1139411099
Андрей Молчанов
2006-02-08 18:04
2006.03.12
Проблемы с масштабированием


2-1140641003
TimScorp
2006-02-22 23:43
2006.03.12
ListBox


2-1140530847
Korefey
2006-02-21 17:07
2006.03.12
преобразование числа в строку


2-1140696688
-=Dark=-
2006-02-23 15:11
2006.03.12
Кто нить сталкивался с такой проблемой?


15-1139945845
Подключенный
2006-02-14 22:37
2006.03.12
IP подключенных к свичу