<
title>áèáëèîòåêà äëÿ ðàáîòû ñ 2d áóôåðàìè<
/title>
<
meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
body
{
font-size: 15px;
font-family: "Bookman Old Style";
color: black;
text-align: justify;
}
h1 { color: green; font-size: 23px; }
h2 { color: green; font-size: 21px; }
h3 { color: green; font-size: 19px; }
h4 { color: #803f00; font-size: 17px; }
i { color: #0099cc; }
b { color: #0099cc; }
p {
text-indent: 1em;
margin-top: 3px;
margin-bottom: 2px;
margin-left: 0px;
margin-right: 0px;
}
ol, ul, dl{
margin-top: 3px;
margin-bottom: 2px;
}
pre
{
padding: 2px;
padding-left: 20px;
margin-top: 5px;
margin-bottom: 5px;
margin-left: 0px;
margin-right: 0px;
font-family: "Courier New";
font-size: 15px;
color: #004000;
background-color: #ffd0ff;
}
table { font-size: 15px; }
<
li><
a href="#f_buf">Ôîðìàòû áóôåðîâ<
/a><
/li>
<
li><
a href="#fun">Ôóíêöèè<
/a><
br>
<
li><
a href="#const">Êîíñòàíòû<
/a><
br>
<
li><
a href="#tabl_e">Òàáëèöà ýêñïîðòà<
/a><
/li>
<
li><
a href="#hist">Èñòîðèÿ<
/a><
/li>
<
p>Äîêóìåíòàöèÿ ê ñâîáîäíîé áèáëèîòåêå <
b>buf2d.asm<
/b>, äëÿ <
b>ÎÑ Êîëèáðè<
/b>.
Ýòà áèáëèîòåêà ñîçäàíà äëÿ ðàáîòû ñ 2d èçîáðàæåíèÿìè.
Ñ åå ïîìîùüüþ ìîæíî ñîçäàâàòü áóôåðà ñ èçîáðàæåíèÿìè â ïàìÿòè, è ïðè íåîáõîäèìîñòè âûâîäèòü èõ íà ýêðàí.
Èçîáðàæåíèÿ ìîæíî íàêëàäûâàòü îäíî íà äðóãîå, ïîääåðæèâàåòñÿ ðàáîòà ñ ïðîçðà÷íûìè èçîáðàæåíèÿìè, åñòü ôóíêöèÿ ðèñîâàíèÿ ëèíè ïîêà íà ýòîì âñå.<
/p>
<
p>Ïîñëåäíåå îáíîâëåíèå áèáëèîòåêè 30.07.10.<
/p>
<
h1><
a name="f_buf">Ôîðìàòû áóôåðîâ<
/a><
/h1>
<
p>Ïîääåðæèâàåòñÿ
3 ôîðìàòà áóôåðîâ.
Êàæäàÿ ôóíêöèÿ ïðè ðàáîòå ñ áóôåðàìè ìîæåò áûòü ðàñ÷èòàíà íà ðàáîòó ñ îïðåäåëåííûìè ôîðìàòàìè èçîáðàæåíèé.<
/p>
<
p>Ñîæåðæèò àëüôà êàíàë <
b>a<
/b>
(ïðîçðà÷íîñòü
) èçîáðàæåíèÿ. Íà ýêðàí íå âûâîäèòñÿ. Èñïîëüçóåòñÿ äëÿ ñîçäàíÿ
32-áèòíûõ áóôåðîâ.<
/p>
<
p>Äàííûé áóôåð ñîäåðæèò èçîáðàæåíèå â ôîðìàòå <
b>rgb<
/b>. Ìîæåò âûâîäèòñÿ íà ýêðàí.<
/p>
<
p>Ñîäåðæèò ïðîçðà÷íîå èçîáðàæåíèå â ôîðìàòå <
b>rgba<
/b>. Íà ýêðàí íå âûâîäèòñÿ. Èñïîëüçóåòñÿ äëÿ íàëîæåíèÿ èçîáðàæåíèé.<
/p>
<
h1><
a name="fun">Ôóíêöèè<
/a><
/h1>
<
p>Ïî÷òè âñå ôóíêöèè
1-ì ïàðàìåòðîì ïðèíèìàþò óêàçàòåëü íà ñòðóêòóðó áóôåðà,
èç êîòîðîé ìîãóò èñïîëüçîâàòüñÿ ïàðàìåòðû, íóæíûå äëÿ ðàáîòû êîíêðåòíîé ôóíêöèè.
Ïðèìåð ñòðóêòóðû áóôåðà èçîáðàæåíèÿ:<
/p>
buf_0:
dd 0 ;+ 0 óêàçàòåëü íà áóôåð èçîáðàæåíèÿ
dw 100 ;+ 4 îòñòóï ñëåâà
dw 10 ;+ 6 îòñòóï ñïðàâà
dd 150 ;+ 8 øèðèíà
dd 100 ;+12 âûñîòà
dd 0x80 ;+16 ôîíîâûé öâåò
db
24 ;+
20 áèò íà ïèêñåëü<
/pre>
<
p>Ýòà ôóíêöèÿ ïîëó÷àåò óêàçàòåëè íà ôóíêöèè ðàáîòû ñ ïàìÿòüþ, âûçûâàòñÿ äîëæíà ïðè çàãðóçêå áèáëèîòåêè. Ìîæåòå èñïîëüçîâàòü ìàêðîñ <
b>@use_library_mem<
/b>, äëÿ åå àâòîìàòè÷åñêîé íàñòðîéêè.<
/p>
<
p>Ñîçäàåò áóôåð è ÷èñòèò åãî ôîíîâûì öâåòîì.<
/p>
<
h4>buf2d_create_f_img<
/h4>
<
p>Ñîçäàåò áóôåð íà îñíîâå èçîáðàæåíèÿ â ôîðìàòå <
b>rgb<
/b>.<
/p>
<
p>×èñòèò áóôåð ôîíîâûì öâåòîì.<
/p>
<
p>Ðèñóåò áóôåð íà ýêðàíå
(ðàáîòàåò ÷åðåç ñèñòåìíóþ ô.
7). Ðèñóþòñÿ òîëüêî áóôåðà ñ ãëóáèíîé öâåòà
24 áèòà.<
/p>
<
p>Îñâîáîæäàåò ïàìÿòü çàíÿòóþ èçîáðàæåíèåì áóôåðà.<
/p>
<
p>Ðèñóåò â áóôåðå ëèíèþ ñ çàäàííûì öâåòîì è êîîðäèíàòàìè. Ïðèìåð èñïîëüçîâàíèÿ:<
/p>
<
pre>stdcall
[buf2d_line
], buf_0,
30,
10,
110,
70, 0xffff00 ;ðèñóåì ëèíèþ<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà â êîòîðîì áóäåò ðèñîâàòüñÿ ëèíèÿ;
30,
10,
110,
70 - êîîðäèíàòû ëèíèè; 0xffff00 - öâåò ëèíèè.<
/p>
<
h4>buf2d_rect_by_size<
/h4>
<
p>Ðèñóåò ïðÿìîóãîëüíóþ ðàìêó, ïî äâóì êîîðäèíàòàì,
2-ÿ êîîðäèíàòà çàäàíà ïî ðàçìåðó.<
/p>
<
pre>stdcall
[buf2d_rect_by_size
], buf_0,
10,
10,
150,
100, 0x8080<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà â êîòîðîì áóäåò ðèñîâàòüñÿ ïðÿìîóãîëüíèê;
10,
10 - êîîðäèíàòû ëåâîãî âåðõíåãî óãëà;
150,
100 - ðàçìåð ïðÿìîóãîëüíèêà; 0x8080 - öâåò ëèíèè.<
/p>
<
h4>buf2d_filled_rect_by_size<
/h4>
<
p>Ðèñóåò çàêðàøåííûé ïðÿìîóãîëüíèê, ïî äâóì êîîðäèíàòàì,
2-ÿ êîîðäèíàòà çàäàíà ïî ðàçìåðó. Åñëè ðàçìåð çàäàòü
1*
1, òî áóäåò íàðèñîâàíà òî÷êà ðàçìåðîì â
1 ïèêñåëü, ò.å. ðàçìåð ïðÿìîóãîëüíèêà â ïèêñåëÿõ áóäåò ðàâåí óêàçàííîìó.<
/p>
<
pre>stdcall
[buf2d_rect_by_size
], buf_0,
10,
10,
150,
100, 0x8080<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà â êîòîðîì áóäåò ðèñîâàòüñÿ ïðÿìîóãîëüíèê;
10,
10 - êîîðäèíàòû ëåâîãî âåðõíåãî óãëà;
150,
100 - ðàçìåð ïðÿìîóãîëüíèêà; 0x8080 - öâåò ïðÿìîóãîëèêà.<
/p>
<
p>Ðèñóåò â áóôåðå îêðóæíîñòü ñ çàäàííûì öâåòîì è ðàäèóñîì. Ïðèìåð èñïîëüçîâàíèÿ:<
/p>
<
pre>stdcall
[buf2d_circle
], buf_0,
25,
70,
15, 0xff0000<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà â êîòîðîì áóäåò ðèñîâàòüñÿ îêðóæíîñòü;
25,
70 - êîîðäèíàòû öåíòðà;
15 - ðàäèóñ; 0xff0000 - öâåò.<
/p>
<
p>Ñæèìàåò èçîáðàæåíèå â áóôåðå ïî âûñîòå â
2 ðàçà, ïðè ýòîì ðàçìåð ñàìîãî áóôåðà íå óìåíüøàåòñÿ.<
/p>
<
p>Ñæèìàåò èçîáðàæåíèå â áóôåðå ïî øèðèíå â
2 ðàçà, ïðè ýòîì ðàçìåð ñàìîãî áóôåðà íå óìåíüøàåòñÿ.<
/p>
<
h4>buf2d_conv_24_to_8<
/h4>
<
p>Ïðåîáðàçîâàíèå áóôåðà èç
24-áèòíîãî â
8-áèòíûé.
Ïðè ïðåîáðàçîâàíèè óêàçûâàåòñÿ êàêîé öâåò áåðàòü: 0-ñèíèé, 1-çåëåíûé, 2-êðàñíûé.
Îñòàëüíûå öâåòà ïðè ïðåîáðàçîâàíèè òåðÿþòñÿ.<
/p>
<
h4>buf2d_conv_24_to_32<
/h4>
<
p>Ïðåîáðàçîâàíèå áóôåðà èç
24-áèòíîãî â
32-áèòíûé.
Ïðè ïðåîáðàçîâàíèè óêàçûâàåòñÿ òàêæå
8-áèòíûé áóôåð, êîòîðûé áóäåò èñïîëüçîâàí äëÿ ñîçäàíèÿ àëüôà êàíàëà. Ïðèìåð:<
/p>
<
pre>stdcall
[buf2d_conv_24_to_32
],buf_a,buf_b ;äåëàåì áóôåð rgba
32áèò<
/pre>
<
p>Äî âûïîëíåíèÿ ôóíêöèè áóôåð buf_a äîëæåí áûòü
24 áèòíûì, à áóôåð buf_b -
8 áèòíûì.
Ïîñëå âûïîëíåíèÿ ôóíêöèè áóôåð buf_a ñòàíåò
32 áèòíûì, áóôåð buf_b íå èçìåíèòñÿ.<
/p>
<
p>Ðèñóåò â áóôåðå èçîáðàæåíèå èç äðóãîãî áóôåðà â óêàçàííûõ êîîðäèíàòàõ. Áóôåð â êîòîðîì ðèñóò
(ïðèåìíèê
) äîëæåí áûòü
24 áèòíûì, à òîò êîòîðûé ðèñóåòñÿ
(èñòî÷íèê
) 24 èëè
32 áèòíûì. Åñëè áóôåð èñòî÷íèê
32 áèòíûé, òî åãî ïðîçðà÷íîñòü ïðè ðèñîâàíèè íå ó÷èòûâàåòñÿ, äëÿ ó÷åòà ïðîçðà÷íîñòè èñïîëüçóåòñÿ ôóíêöèÿ <
i>buf2d_bit_blt_transp<
/i>.<
/p>
<
h4>buf2d_bit_blt_transp<
/h4>
<
p>Ðèñóåò â áóôåðå èçîáðàæåíèå èç äðóãîãî áóôåðà â óêàçàííûõ êîîðäèíàòàõ, ïðè ýòîì ó÷èòûâàåòñÿ ïðîçðà÷íîñòü.
Áóôåð êîòîðûé áóäåò íàðèñîâàí äîëæåí áûòü
32 áèòíûì, à òîò â êîòîðîì ðèñóþò
24 áèòíûì.<
/p>
<
h4>buf2d_bit_blt_alpha<
/h4>
<
p>Ðèñóåò â áóôåðå èçîáðàæåíèå èç äðóãîãî áóôåðà â óêàçàííûõ êîîðäèíàòàõ, ïðè ýòîì ó÷èòûâàåòñÿ ïðîçðà÷íîñòü.
Áóôåð êîòîðûé áóäåò íàðèñîâàí äîëæåí áûòü
8 áèòíûì, à òîò â êîòîðîì ðèñóþò
24 áèòíûì.<
/p>
<
h4>buf2d_cruve_bezier<
/h4>
<
p>Ðèñóåò ïî òðåì òî÷êàì îòðåçîê êðèâîé áåçüå.<
/p>
<
h4>buf2d_convert_text_matrix<
/h4>
<
p>Ïðåîáðàçóåò ìàòðèöó ñ òåêñòîì ðàçìåðîì
16*
16 â ðàçìåð
1*
256. Íåîáõîäèìî äëÿ ñîçäàíèÿ ìàòðèöû äëÿ ðèñîâàíèÿ òåêñòà. Ïåðåä èñïîëüçîâàíèåì äàííîé ôóíêöèè ïðåäïîëàãàåòñÿ ÷òî åñòü èçîáðàæåíèå ñ ïîëíûì íàáîðîì ñèìâîëîâ ðàçìåðîì
16 ñòîëáöîâ íà
16 ñòðîê, èç êîòîðîãî ïðåäâàðèòåëüíî áûë ñîçäàí
8 áèòíûé áóôåð.<
/p>
<
pre>stdcall
[buf2d_create_f_img
], buf_1,
[image_data
] ;ñîçäàåì áóôåð
24 áèò íà îñíîâå äàííûõ èçîáðàæåíèÿ
stdcall [buf2d_conv_24_to_8], buf_1,1 ;äåëàåì áóôåð ïðîçðà÷íîñòè 8 áèò
stdcall
[buf2d_convert_text_matrix
], buf_1<
/pre>
<
p>ãäå buf_1 - ñòðóêòóðà áóôåðà äëÿ ôîðìèðîâàíèÿ òåêñòîâîé ìàòðèöû;
image_data - äàííûå èçîáðàæåíèÿ òåêñòîâîé ìàòðèöû â ôîðìàòå rgb, ðàçìåðîì
16*
16 ñèìâîëîâ.<
/p>
<
p>Ðèñóåò òåêñò â áóôåðå, èñïîëüçóÿ ìàòðèöó ñ òåêñòîì ðàçìåðîì
1*
256 ñèìâîëîâ. Ïðèìåð:<
/p>
<
pre>stdcall
[buf2d_draw_text
], buf_0, buf_1,some_text,
20,
10,0x4040ff ;ðèñóåì ñòðîêó ñ òåêñòîì<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà â êîòîðîì áóäåò ðèñîâàòüñÿ òåêñò;
buf_1 - ñòðóêòóðà áóôåðà ñ òåêñòîâîé ìàòðèöåé â ôîðìàòå 8 áèò, ðàçìåðîì 1*256 ñèìâîëîâ;
some_text - òåêñò, êîòîðûé áóäåò âûâåäåí â áóôåð buf_0.<
/p>
<
h4>buf2d_crop_color<
/h4>
<
p>Îáðåçàíèå áóôåðà, ïî óêàçàííîìó öâåòó. Ôóíêöèÿ èñïîëüçóåòñÿ äëÿ óìåíüøåíèÿ ïàìÿòè, çàíèìàåìîé áóôåðîì. Îòðåçàþòñÿ êðàéíèå ÷àñòè áóôåðà èìåþùèå îäèíàêîâûé öâåò. Ïðèìåð:<
/p>
<
pre>stdcall
[buf2d_crop_color
], buf_0,0xffffff,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM<
/pre>
<
p>ãäå buf_0 - ñòðóêòóðà áóôåðà êîòîðûé áóäåò îáðåçàí;
0xffffff - öâåò ïî êîòîðîìó áóäåò îáðåçàòüñÿ áóôåð;
BUF2D_OPT_CROP_TOP è BUF2D_OPT_CROP_BOTTOM - êîíñòàíòû, óêàçûâàþùèå ñ êàêèõ ñòîðîí îáðåçàòü áóôåð.<
/p>
<
p>Ñäâèã èçîáðàæåíèÿ â áóôåðå ïî âûñîòå ââåðõ èëè âíèç.<
/p>
<
h1><
a name="const">Êîíñòàíòû<
/a><
/h1>
<
h4>BUF2D_OPT_CROP_TOP equ
1<
/h4>
<
p>Êîíñòàíòà äëÿ ôóíêöèè buf2d_crop_color, îáîçíà÷àåò îáðåçêó áóôåðà ñâåðõó<
/p>
<
h4>BUF2D_OPT_CROP_LEFT equ
2<
/h4>
<
p>Êîíñòàíòà äëÿ ôóíêöèè buf2d_crop_color, îáîçíà÷àåò îáðåçêó áóôåðà ñëåâà<
/p>
<
h4>BUF2D_OPT_CROP_BOTTOM equ
4<
/h4>
<
p>Êîíñòàíòà äëÿ ôóíêöèè buf2d_crop_color, îáîçíà÷àåò îáðåçêó áóôåðà ñíèçó<
/p>
<
h4>BUF2D_OPT_CROP_RIGHT equ
8<
/h4>
<
p>Êîíñòàíòà äëÿ ôóíêöèè buf2d_crop_color, îáîçíà÷àåò îáðåçêó áóôåðà ñïðàâà<
/p>
<
h1><
a name="tabl_e">Òàáëèöà ýêñïîðòà<
/a><
/h1>
<
p>Ïðèìåð òàáëèöû ýêñïîðòà, ðàñ÷èòàííîé íà èñïîëüçîâàíèå ìàêðîñà <
b>@use_library_mem<
/b>:<
/p>
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_cruve_bezier dd sz_buf2d_cruve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db
'buf2d_offset_h',
0<
/pre>
<
h1><
a name="hist">Èñòîðèÿ<
/a><
/h1>
<
p>02.07.10 - ñàìàÿ ïåðâàÿ âåðñèÿ áèáëèîòåêè,
2 ïðèìåðà èñïîëüçîâàíèÿ.<
/p>
<
p>06.07.10 - ðàñøèðåíû âîçìîæíîñòè ôóíêöèè buf2d_bit_blt, òåïåðü îíà ìîæåò ðèñîâàòü
32 áèòíûå áóôåðû. Äîáàâëåíû
2 íîâûå ôóíêöèè: buf2d_bit_blt_alpha è buf2d_cruve_bezier. Íåáîëüøèå èçìåíåíèÿ â ôóíêöèè buf2d_line.<
/p>
<
p>16.07.10 - èñïðàâëåíî ïî
2 îøèáêè â ôóíêöèÿõ buf2d_img_hdiv2 è buf2d_img_wdiv2, êîòîðûå ìîãëè ïðîÿâëÿòüñÿ ïðè îïðåäåëåííûõ óñëîâèÿõ
(åñëè ðàçìåð èçîáðàæåíèÿ áûë êðàòåí
4Êá è äð.
). Äîáàâëåíû
2 ôóíêöèè äëÿ âûâîäà òåêñòà â áóôåð buf2d_convert_text_matrix è buf2d_draw_text.<
/p>
<
p>19.07.10 - äîáàâëåíà ôóíêöèÿ ðèñîâàíèÿ îêðóæíîñòè buf2d_circle;
èçìåíåí ôîðìàò áóôåðà - äëÿ øèðèíû è âûñîòû èñïîëüçóþòñÿ
4-õ áàéòíûå ÷èñëà âìåñòî
2-õ áàéòíûõ.<
/p>
<
p>29.07.10 - äîáàâëåíû ôóíêöèè buf2d_crop_color è buf2d_offset_h;
èñïðàâëåíèÿ â ôóíêöèè buf2d_delete.<
/p>
<
p>30.09.10 - äîáàâëåíà ôóíêöèÿ buf2d_rect_by_size.<
/p>
<
p>04.10.10 - äîáàâëåíà ôóíêöèÿ buf2d_filled_rect_by_size, äîðàáîòàíà ôóíêöèÿ buf_bit_blt_alpha.<
/p>