Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.015 c
15-1139834037
X9
2006-02-13 15:33
2006.03.12
Помогите с алгеброй


1-1139316542
hgd
2006-02-07 15:49
2006.03.12
Подскажите с нажатием кнопки


4-1135151640
vlad_Ladynin
2005-12-21 10:54
2006.03.12
Запись и воспроизведение действий пользователя.


15-1140181758
oldman
2006-02-17 16:09
2006.03.12
Умер Андрей Петров...


2-1140669848
Silver__Dragon
2006-02-23 07:44
2006.03.12
Выделение цветом в TLIstBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский