Главная страница
    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.014 c
8-1127918290
Виталька2005
2005-09-28 18:38
2006.03.12
Перемещение фигуры на TCanvas


2-1140291757
ForX
2006-02-18 22:42
2006.03.12
Клиент - Сервер


15-1140370249
Stas_on
2006-02-19 20:30
2006.03.12
Светодиоды и COM-порт


15-1139842073
Хинт
2006-02-13 17:47
2006.03.12
Программа для сравнения файлов


1-1137717371
kostan
2006-01-20 03:36
2006.03.12
Ошибка - прозрачная панель при установке темы Windows XP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский