Subversion Repositories Kolibri OS

Rev

Rev 6175 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1535 IgorA 1
2
3
библиотека для работы с 2d буферами
7861 IgorA 4
1535 IgorA 5
45
46
 
47
48
 
49

Оглавление

50
    51
  • Вступление
  • 2759 IgorA 52
  • Форматы буферов
  • 1535 IgorA 53
  • Функции
  • 2759 IgorA 54
      55
    • lib_init
    • 7861 IgorA 56
    • buf2d_create
    • 57
    • buf2d_create_f_img
    • 58
    • buf2d_clear
    • 59
    • buf2d_draw
    • 60
    • buf2d_delete
    • 61
    • buf2d_rotate
    • 62
    • buf2d_resize
    • 63
    • buf2d_line
    • 64
    • buf2d_line_sm
    • 65
    • buf2d_rect_by_size
    • 66
    • buf2d_filled_rect_by_size
    • 67
    • buf2d_circle
    • 68
    • buf2d_img_hdiv2
    • 69
    • buf2d_img_wdiv2
    • 70
    • buf2d_conv_24_to_8
    • 71
    • buf2d_conv_24_to_32
    • 72
    • buf2d_bit_blt
    • 73
    • buf2d_bit_blt_transp
    • 74
    • buf2d_bit_blt_alpha
    • 75
    • buf2d_curve_bezier
    • 76
    • buf2d_convert_text_matrix
    • 77
    • buf2d_draw_text
    • 2815 IgorA 78
    • buf2d_crop_color
    • 7861 IgorA 79
    • buf2d_offset_h
    • 80
    • buf2d_flood_fill
    • 81
    • buf2d_set_pixel
    • 82
    • buf2d_get_pixel
    • 5389 IgorA 83
    • buf2d_flip_h
    • 3040 IgorA 84
    • buf2d_flip_v
    • 3105 IgorA 85
    • buf2d_filter_dither
    • 3040 IgorA 86
       
      2759 IgorA 87
    • buf2d_vox_brush_create
    • 7861 IgorA 88
    • buf2d_vox_brush_delete
    • 89
    • buf2d_vox_obj_draw_1g
    • 90
    • buf2d_vox_obj_get_img_w_3g
    • 91
    • buf2d_vox_obj_get_img_h_3g
    • 92
    • buf2d_vox_obj_draw_3g
    • 93
    • buf2d_vox_obj_draw_3g_scaled
    • 94
    • buf2d_vox_obj_draw_3g_shadows
    • 95
    • buf2d_vox_obj_draw_pl
    • 96
    • buf2d_vox_obj_draw_pl_scaled
    • 2759 IgorA 97
      98
      99
    • Константы
    • 1535 IgorA 100
    • Таблица экспорта
    • 101
    • История
    • 102
      103
       
      104

      Вступление

      105

      Документация к свободной библиотеке buf2d.asm, для ОС Колибри.

      106
       Эта библиотека создана для работы с 2d изображениями.
      1648 IgorA 107
       С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран.
      2759 IgorA 108
       Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями.
      109
       Есть функции рисования линий, кривых Безье, прямоугольников, окружностей.
      110
       Также есть функции для рисований воксельной графики.

      1535 IgorA 111
       
      6175 IgorA 112

      Последнее обновление библиотеки 09.02.16.

      1535 IgorA 113
       
      2759 IgorA 114

      Форматы буферов

      1535 IgorA 115

      Поддерживается 3 формата буферов.

      116
       Каждая функция при работе с буферами может быть расчитана на работу с определенными форматами изображений.

      117
       
      118

      8 бит

      119

      Сожержит альфа канал a (прозрачность) изображения. На экран не выводится. Используется для созданя 32-битных буферов.

      120

      24 бит

      121

      Данный буфер содержит изображение в формате rgb. Может выводится на экран.

      122

      32 бит

      2920 IgorA 123

      Содержит прозрачное изображение в формате rgba. На экран не выводится. Используется для наложения изображений. Если a=255 то пиксель прозрачный, если 0 не прозрачный.

      1535 IgorA 124
       
      125

      Функции

      126
       
      127

      Почти все функции 1-м параметром принимают указатель на структуру буфера,

      128
       из которой могут использоваться параметры, нужные для работы конкретной функции.
      129
       Пример структуры буфера изображения:

      130
      align 4
      131
      buf_0:
      132
      	dd    0 ;+ 0 указатель на буфер изображения
      133
      	dw  100 ;+ 4 отступ слева
      134
      	dw   10 ;+ 6 отступ справа
      135
      	dd  150 ;+ 8 ширина
      136
      	dd  100 ;+12 высота
      137
      	dd 0x80 ;+16 фоновый цвет
      138
      	db   24 ;+20 бит на пиксель
      139
       
      2759 IgorA 140

      lib_init

      1535 IgorA 141

      Эта функция получает указатели на функции работы с памятью, вызыватся должна при загрузке библиотеки. Можете использовать макрос @use_library_mem, для ее автоматической настройки.

      142
       
      7861 IgorA 143

      buf2d_create

      2759 IgorA 144

      Создает буфер и чистит его фоновым цветом. Пример:

      145
      stdcall [buf2d_create], buf_0
      146

      где buf_0 - структура буфера.

      147

      Параметры для создания буфера берутся из структуры.

      1535 IgorA 148
       
      7861 IgorA 149

      buf2d_create_f_img

      1535 IgorA 150

      Создает буфер на основе изображения в формате rgb.

      7861 IgorA 151
      buf2d_w equ dword[edi+8] ;ширина буфера
      152
      buf2d_h equ dword[edi+12] ;высота буфера
      153
      mov edi,buf_i0
      154
      mov buf2d_w,320
      155
      mov buf2d_h,240
      156
      stdcall [buf2d_create_f_img], edi,[open_file_img]
      157

      где buf_0 - структура буфера, open_file_img - указатель на данные изображения в формате rgb, 320 - ширина изображения в пикселях, 240 - высота изображения в пикселях.

      1535 IgorA 158
       
      7861 IgorA 159

      buf2d_clear

      2230 IgorA 160

      Чистит буфер указаным цветом. Пример:

      161
      buf2d_color equ dword[edi+16] ;цвет фона буфера
      162
      mov edi,buf_0
      163
      stdcall [buf2d_clear], edi, buf2d_color ;очищаем экран фоновым цветом
      164

      где buf_0 - структура буфера.

      1535 IgorA 165
       
      7861 IgorA 166

      buf2d_draw

      1535 IgorA 167

      Рисует буфер на экране (работает через системную ф. 7). Рисуются только буфера с глубиной цвета 24 бита.

      168
       
      7861 IgorA 169

      buf2d_delete

      1535 IgorA 170

      Освобождает память занятую изображением буфера.

      171
       
      7861 IgorA 172

      buf2d_rotate

      2975 IgorA 173

      Поворачивает буфер на 90 или 180 градусов. Пример:

      174
      stdcall [buf2d_rotate], buf_0, 90
      175

      где buf_0 - структура буфера (может быть 8, 24 или 32 битным); 90 - угол поворота.

      176
       
      7861 IgorA 177

      buf2d_resize

      6175 IgorA 178

      Изменяет размеры буфера или изображения в буфере. Пока поддерживаются буфера с глубиной цвета 24 бита.

      179

      Пример 1:

      180
      stdcall [buf2d_resize], buf_0, 0,300, 1 ;изменяем высоту буфера
      181

      где buf_0 - структура буфера в котором будет рисоваться линия; 0 - новая ширина буфера (0 означает не изменять размер); 300 - новая высота буфера; 1 - параметр указывающий что изменяются размеры буфера.

      182

      Пример 2:

      183
      stdcall [buf2d_resize], buf_0, 250,0, 2 ;изменяем изображение в буфере
      184

      где 250 - новая ширина буфера; 0 - новая высота буфера (0 означает не изменять размер); 2 - параметр указывающий что изменяем изображение в буфере.

      185

      Если последний параметр равен 2 то размер буфера остается неизменным и функция работает аналогично так как и функции buf2d_img_hdiv2, buf2d_img_wdiv2. Разница в том, что buf2d_resize может сжимать изображения до заданного размера, а не ровно в 2 раза.

      2136 IgorA 186
       
      7861 IgorA 187

      buf2d_line

      1648 IgorA 188

      Рисует в буфере линию с заданным цветом и координатами. Пример:

      1535 IgorA 189
      stdcall [buf2d_line], buf_0, 30,10, 110,70, 0xffff00 ;рисуем линию
      190

      где buf_0 - структура буфера в котором будет рисоваться линия; 30, 10, 110, 70 - координаты линии; 0xffff00 - цвет линии.

      2230 IgorA 191

      Для рисования сглаженной линии используйте buf2d_line_sm.

      1535 IgorA 192
       
      7861 IgorA 193

      buf2d_line_sm

      2230 IgorA 194

      Рисует в буфере линию принимает такиже параметры как и функция buf2d_line. Данная функция рисует сглаженную линию более красивую чем buf2d_line, но работает медленнее неё за счет вычисления смешанных цветов фона и самой линии.

      195
       
      7861 IgorA 196

      buf2d_rect_by_size

      2358 IgorA 197

      Рисует прямоугольную рамку, по двум координатам, 2-я координата задана по размеру. Если размеры отрицательные рамка рисуется в обратном направлении.

      1634 IgorA 198
      stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080
      2358 IgorA 199

      где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет линии.

      1634 IgorA 200
       
      7861 IgorA 201

      buf2d_filled_rect_by_size

      2358 IgorA 202

      Рисует закрашенный прямоугольник, по двум координатам, 2-я координата задана по размеру. Если размер задать 1*1, то будет нарисована точка размером в 1 пиксель, т.е. размер прямоугольника в пикселях будет равен указанному. Если размеры отрицательные прямоугольник рисуется в обратном направлении.

      1642 IgorA 203
      stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080
      2358 IgorA 204

      где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет прямоуголика.

      1642 IgorA 205
       
      7861 IgorA 206

      buf2d_circle

      1648 IgorA 207

      Рисует в буфере окружность с заданным цветом и радиусом. Пример:

      1535 IgorA 208
      stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000
      209

      где buf_0 - структура буфера в котором будет рисоваться окружность; 25, 70 - координаты центра; 15 - радиус; 0xff0000 - цвет.

      210
       
      7861 IgorA 211

      buf2d_img_hdiv2

      1535 IgorA 212

      Сжимает изображение в буфере по высоте в 2 раза, при этом размер самого буфера не уменьшается.

      213
       
      7861 IgorA 214

      buf2d_img_wdiv2

      1535 IgorA 215

      Сжимает изображение в буфере по ширине в 2 раза, при этом размер самого буфера не уменьшается.

      216
       
      217

      buf2d_conv_24_to_8

      218

      Преобразование буфера из 24-битного в 8-битный.

      219
       При преобразовании указывается какой цвет берать: 0-синий, 1-зеленый, 2-красный.
      220
       Остальные цвета при преобразовании теряются.

      221
       
      222

      buf2d_conv_24_to_32

      223

      Преобразование буфера из 24-битного в 32-битный.

      224
       При преобразовании указывается также 8-битный буфер, который будет использован для создания альфа канала. Пример:

      225
      stdcall [buf2d_conv_24_to_32],buf_a,buf_b ;делаем буфер rgba 32бит
      226

      До выполнения функции буфер buf_a должен быть 24 битным, а буфер buf_b - 8 битным.

      227
       После выполнения функции буфер buf_a станет 32 битным, буфер buf_b не изменится.

      228
       
      7861 IgorA 229

      buf2d_bit_blt

      1648 IgorA 230

      Рисует в буфере изображение из другого буфера в указанных координатах. Буфер в котором рисут (приемник) должен быть 24 битным, а тот который рисуется (источник) 24 или 32 битным. Если буфер источник 32 битный, то его прозрачность при рисовании не учитывается, для учета прозрачности используется функция buf2d_bit_blt_transp. Пример:

      231
      stdcall [buf2d_bit_blt], buf_0, 50,30, buf_1 ;прорисовка среднего скина
      232

      где buf_0 - структура буфера в котором будет рисоваться изображение (приемник);

      233
        buf_1 - структура буфера с рисуемым изображением (источник);
      234
        50,30 - координаты для вывода изображения, определяют положение рисуемой картинки в buf_0.

      1535 IgorA 235
       
      236

      buf2d_bit_blt_transp

      237

      Рисует в буфере изображение из другого буфера в указанных координатах, при этом учитывается прозрачность.

      238
       Буфер который будет нарисован должен быть 32 битным, а тот в котором рисуют 24 битным.

      239
       
      240

      buf2d_bit_blt_alpha

      241

      Рисует в буфере изображение из другого буфера в указанных координатах, при этом учитывается прозрачность.

      242
       Буфер который будет нарисован должен быть 8 битным, а тот в котором рисуют 24 битным.

      243
       
      1727 IgorA 244

      buf2d_curve_bezier

      1535 IgorA 245

      Рисует по трем точкам отрезок кривой безье.

      2358 IgorA 246
      stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff
      247

      где buf_0 - структура буфера в котором будет рисоваться кривая;

      248
        (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90 - координаты точек (10,20), (110,10), (50,90);
      249
        0xff - цвет прямой.

      1535 IgorA 250
       
      251

      buf2d_convert_text_matrix

      252

      Преобразует матрицу с текстом размером 16*16 в размер 1*256. Необходимо для создания матрицы для рисования текста. Перед использованием данной функции предполагается что есть изображение с полным набором символов размером 16 столбцов на 16 строк, из которого предварительно был создан 8 битный буфер.

      253
      stdcall [buf2d_create_f_img], buf_1,[image_data] ;создаем буфер 24 бит на основе данных изображения
      254
      stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
      255
      stdcall [buf2d_convert_text_matrix], buf_1
      256

      где buf_1 - структура буфера для формирования текстовой матрицы;

      257
        image_data - данные изображения текстовой матрицы в формате rgb, размером 16*16 символов.

      258
       
      259

      buf2d_draw_text

      260

      Рисует текст в буфере, используя матрицу с текстом размером 1*256 символов. Пример:

      261
      stdcall [buf2d_draw_text], buf_0, buf_1,some_text,20,10,0x4040ff ;рисуем строку с текстом
      2815 IgorA 262

      где buf_0 - структура буфера в котором будет рисоваться текст;

      263

      buf_1 - структура буфера с текстовой матрицей в формате 8 бит, размером 1*256 символов;

      264

      some_text - текст, который будет выведен в буфер buf_0.

      1535 IgorA 265
       
      2815 IgorA 266

      buf2d_crop_color

      1535 IgorA 267

      Обрезание буфера, по указанному цвету. Функция используется для уменьшения памяти, занимаемой буфером. Отрезаются крайние части буфера имеющие одинаковый цвет. Пример:

      268
      stdcall [buf2d_crop_color], buf_0,0xffffff,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM
      2815 IgorA 269

      где buf_0 - структура буфера который будет обрезан;

      270

      0xffffff - цвет по которому будет обрезаться буфер;

      271

      BUF2D_OPT_CROP_TOP и BUF2D_OPT_CROP_BOTTOM - константы, указывающие с каких сторон обрезать буфер.

      1535 IgorA 272
       
      273

      buf2d_offset_h

      274

      Сдвиг изображения в буфере по высоте вверх или вниз.

      275
       
      1684 IgorA 276

      buf2d_flood_fill

      2358 IgorA 277

      Функция для рекурсивной заливки выбранным цветом. Имеется два варианта заливки. Пример:

      1684 IgorA 278
      stdcall [buf2d_flood_fill], buf_0, 100,200, 0, 0xff,0xff0000
      2815 IgorA 279

      где buf_0 - структура буфера;

      280

      100,200 - координаты точки, с которой начнется заливка;

      281

      0 - параметр, определяет алгоритм заливки (может быть 0 или 1);

      282

      0xff - цвет заливки;

      283

      0xff0000 - зависит от значения 4-го параметра, 1) если 0 - цвет до которого будет заливаться область; 2) если 1 - цвет области которая будет заливатся;

      1684 IgorA 284
       
      1910 IgorA 285

      buf2d_set_pixel

      3040 IgorA 286

      Функция ставит точку, принимает координаты и цвет. Пример:

      1910 IgorA 287
      stdcall [buf2d_set_pixel], buf_0, 100,150, 0xff0000
      2658 IgorA 288

      где buf_0 - структура буфера;

      289

      100,150 - координаты точки;

      290

      0xff0000 - цвет точки.

      1910 IgorA 291
       
      2658 IgorA 292

      buf2d_get_pixel

      3040 IgorA 293

      Функция записывает цвет точки в регистр eax, принимает координаты. Пример:

      2658 IgorA 294
      stdcall [buf2d_get_pixel], buf_0, 100,150
      295

      где buf_0 - структура буфера;

      296

      100,150 - координаты точки;

      297

      eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.

      298
       
      5389 IgorA 299

      buf2d_flip_h

      300

      Отражает изображение в буфере по горизонтали (лево и право меняются местами). Пример:

      301
      stdcall buf2d_flip_h, buf_0
      302

      где buf_0 - структура 24-х или 32-х битного буфера.

      303
       
      3040 IgorA 304

      buf2d_flip_v

      305

      Отражает изображение в буфере по вертикали (верх и низ меняются местами). Пример:

      306
      stdcall buf2d_flip_v, buf_0
      5389 IgorA 307

      где buf_0 - структура 24-х или 32-х битного буфера.

      3040 IgorA 308
       
      3105 IgorA 309

      buf2d_filter_dither

      310

      Фильтр, который преобразует изображение из 24 битного буфера в 8-ми цветное. Разрядность буфера не меняется. Пример:

      311
      stdcall [buf2d_filter_dither], buf_0, 0
      5389 IgorA 312

      где buf_0 - структура 24-х битного буфера;

      3138 heavyiron 313

      0 - алгоритм (возможные значения: 0 - Sierra Lite, 1 - Floyd-Steinberg, 2 - Burkers, 3 - Heavyiron_mod, 4 - Atkinson).

      3105 IgorA 314
       
      2759 IgorA 315

      buf2d_vox_brush_create

      3040 IgorA 316

      Создание воксельной кисти. Пример:

      317
      stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z
      2759 IgorA 318
       
      3040 IgorA 319
      .........
      320
       
      321
      align 4
      322
      vox_6_7_z: ;данные для создания минимального единичного вокселя
      323
      dd 0,0,1,1,0,0,\
      324
         0,2,2,2,2,0,\
      325
         2,2,2,2,2,2,\
      326
         2,3,2,2,3,2,\
      327
         2,3,3,3,3,2,\
      328
         0,3,3,3,3,0,\
      329
         0,0,3,3,0,0
      330
       
      331
      align 4
      332
      buf_vox: ;данные для создания набора воксельных кистей
      333
      	db 6,7,4,3 ;w,h,h_osn,n
      334
      	rb BUF_STRUCT_SIZE*(3+1)
      335

      где vox_6_7_z - данные для создания минимального единичного вокселя (0 - означает прозрачный пиксель, другие цифры определяют глубину для заполнения буфера глубины);

      336

      buf_vox - данные для создания набора воксельных кистей (6 и 7 - размер минимального единичного вокселя, 4 - высота верхнего основания минимального единичного вокселя, 3 - число создаваемых воксельных кистей для рисования вокселей верхних уровней);

      337
       
      2759 IgorA 338

      buf2d_vox_brush_delete

      339

      Удаление воксельной кисти.

      340
       
      2815 IgorA 341

      buf2d_vox_obj_draw_1g

      342

      Рисование воксельного объекта с 1-й гранью.

      343
       
      2759 IgorA 344

      buf2d_vox_obj_get_img_w_3g

      345

      Возврашает ширину воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

      346
       
      347

      buf2d_vox_obj_get_img_h_3g

      348

      Возврашает высоту воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

      349
       
      350

      buf2d_vox_obj_draw_3g

      351

      Рисование воксельного объекта с 3-мя гранями.

      352
       
      353

      buf2d_vox_obj_draw_3g_scaled

      354

      Рисование части воксельного объекта.

      355
       
      356

      buf2d_vox_obj_draw_3g_shadows

      357

      Функция рисующая тени для изображений нарисованных с помощью функции buf2d_vox_obj_draw_3g или buf2d_vox_obj_draw_3g_scaled.

      358
       
      359

      buf2d_vox_obj_draw_pl

      360

      Функция рисующая срез воксельного обьекта.

      361
       
      362

      buf2d_vox_obj_draw_pl_scaled

      363

      Функция рисующая срез части воксельного обьекта.

      364
       
      1535 IgorA 365

      Константы

      366

      BUF2D_OPT_CROP_TOP equ 1

      2815 IgorA 367

      Константа для функции buf2d_crop_color, обозначает обрезку буфера сверху

      1538 IgorA 368

      BUF2D_OPT_CROP_LEFT equ 2

      2815 IgorA 369

      Константа для функции buf2d_crop_color, обозначает обрезку буфера слева

      1535 IgorA 370

      BUF2D_OPT_CROP_BOTTOM equ 4

      2815 IgorA 371

      Константа для функции buf2d_crop_color, обозначает обрезку буфера снизу

      1535 IgorA 372

      BUF2D_OPT_CROP_RIGHT equ 8

      2815 IgorA 373

      Константа для функции buf2d_crop_color, обозначает обрезку буфера справа

      1535 IgorA 374
       
      375

      Таблица экспорта

      376

      Пример таблицы экспорта, расчитанной на использование макроса @use_library_mem:

      377
      align 4
      378
      import_buf2d_lib:
      379
      	dd sz_lib_init
      380
      	buf2d_create dd sz_buf2d_create
      381
      	buf2d_create_f_img dd sz_buf2d_create_f_img
      382
      	buf2d_clear dd sz_buf2d_clear
      383
      	buf2d_draw dd sz_buf2d_draw
      384
      	buf2d_delete dd sz_buf2d_delete
      2975 IgorA 385
      	buf2d_rotate dd sz_buf2d_rotate
      2136 IgorA 386
      	buf2d_resize dd sz_buf2d_resize
      1535 IgorA 387
      	buf2d_line dd sz_buf2d_line
      2230 IgorA 388
      	buf2d_line_sm dd sz_buf2d_line_sm
      1634 IgorA 389
      	buf2d_rect_by_size dd sz_buf2d_rect_by_size
      1642 IgorA 390
      	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
      1535 IgorA 391
      	buf2d_circle dd sz_buf2d_circle
      392
      	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
      393
      	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
      394
      	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
      395
      	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
      396
      	buf2d_bit_blt dd sz_buf2d_bit_blt
      397
      	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
      398
      	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
      1727 IgorA 399
      	buf2d_curve_bezier dd sz_buf2d_curve_bezier
      1535 IgorA 400
      	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
      401
      	buf2d_draw_text dd sz_buf2d_draw_text
      402
      	buf2d_crop_color dd sz_buf2d_crop_color
      403
      	buf2d_offset_h dd sz_buf2d_offset_h
      1684 IgorA 404
      	buf2d_flood_fill dd sz_buf2d_flood_fill
      1910 IgorA 405
      	buf2d_set_pixel dd sz_buf2d_set_pixel
      2658 IgorA 406
      	buf2d_get_pixel dd sz_buf2d_get_pixel
      5389 IgorA 407
      	buf2d_flip_h dd sz_buf2d_flip_h
      3040 IgorA 408
      	buf2d_flip_v dd sz_buf2d_flip_v
      3105 IgorA 409
      	buf2d_filter_dither dd sz_buf2d_filter_dither
      1535 IgorA 410
       
      2759 IgorA 411
      	;воксельные функции:
      412
      	buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
      413
      	buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
      2815 IgorA 414
      	buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
      2759 IgorA 415
      	buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
      416
      	buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
      417
      	buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
      418
      	buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
      419
      	buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
      420
      	buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
      421
      	buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
      422
       
      1535 IgorA 423
      	dd 0,0
      424
      	sz_lib_init db 'lib_init',0
      425
      	sz_buf2d_create db 'buf2d_create',0
      426
      	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
      427
      	sz_buf2d_clear db 'buf2d_clear',0
      428
      	sz_buf2d_draw db 'buf2d_draw',0
      429
      	sz_buf2d_delete db 'buf2d_delete',0
      2975 IgorA 430
      	sz_buf2d_rotate db 'buf2d_rotate',0
      2136 IgorA 431
      	sz_buf2d_resize db 'buf2d_resize',0
      1535 IgorA 432
      	sz_buf2d_line db 'buf2d_line',0
      2230 IgorA 433
      	sz_buf2d_line_sm db 'buf2d_line_sm',0
      1634 IgorA 434
      	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
      1642 IgorA 435
      	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
      1535 IgorA 436
      	sz_buf2d_circle db 'buf2d_circle',0
      437
      	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
      438
      	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
      439
      	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
      440
      	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
      441
      	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
      442
      	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
      443
      	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
      1727 IgorA 444
      	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
      1535 IgorA 445
      	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
      446
      	sz_buf2d_draw_text db 'buf2d_draw_text',0
      447
      	sz_buf2d_crop_color db 'buf2d_crop_color',0
      1684 IgorA 448
      	sz_buf2d_offset_h db 'buf2d_offset_h',0
      1910 IgorA 449
      	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
      2658 IgorA 450
      	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
      2759 IgorA 451
      	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
      5389 IgorA 452
      	sz_buf2d_flip_h db 'buf2d_flip_h',0
      3040 IgorA 453
      	sz_buf2d_flip_v db 'buf2d_flip_v',0
      3105 IgorA 454
      	sz_buf2d_filter_dither db 'buf2d_filter_dither',0
      1535 IgorA 455
       
      2759 IgorA 456
      	;воксельные функции:
      457
      	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
      458
      	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
      2815 IgorA 459
      	sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
      2759 IgorA 460
      	sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
      461
      	sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
      462
      	sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
      463
      	sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
      464
      	sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
      465
      	sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
      466
      	sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
      467
       
      1535 IgorA 468

      История

      469

      02.07.10 - самая первая версия библиотеки, 2 примера использования.

      470

      06.07.10 - расширены возможности функции buf2d_bit_blt, теперь она может рисовать 32 битные буферы. Добавлены 2 новые функции: buf2d_bit_blt_alpha и buf2d_cruve_bezier. Небольшие изменения в функции buf2d_line.

      471

      16.07.10 - исправлено по 2 ошибки в функциях buf2d_img_hdiv2 и buf2d_img_wdiv2, которые могли проявляться при определенных условиях (если размер изображения был кратен 4Кб и др.). Добавлены 2 функции для вывода текста в буфер buf2d_convert_text_matrix и buf2d_draw_text.

      472

      19.07.10 - добавлена функция рисования окружности buf2d_circle;

      473
       изменен формат буфера - для ширины и высоты используются 4-х байтные числа вместо 2-х байтных.

      474

      29.07.10 - добавлены функции buf2d_crop_color и buf2d_offset_h;

      475
       исправления в функции buf2d_delete.

      1634 IgorA 476

      30.09.10 - добавлена функция buf2d_rect_by_size.

      7861 IgorA 477

      04.10.10 - добавлена функция buf2d_filled_rect_by_size, доработана функция buf2d_bit_blt_alpha.

      478

      07.10.10 - доработана функция buf2d_bit_blt (при попытке нарисовать изображение за пределами правого края буфера приложение вызвавшее функцию падало).

      1653 IgorA 479

      11.10.10 - исправлено задание цветов в некоторых функциях, красный и синий цвета поменял местами. Теперь цвета совпадают с сисемными функциями.

      1684 IgorA 480

      02.11.10 - добавлена функция buf2d_flood_fill.

      1727 IgorA 481

      22.12.10 - изменено имя функции buf2d_cruve_bezier на buf2d_curve_bezier.

      2230 IgorA 482

      25.03.11 - добавлена функция для рисования точки buf2d_set_pixel.

      2136 IgorA 483

      30.08.11 - добавлена функция изменения размеров буфера buf2d_resize.

      2383 IgorA 484

      13.09.11 - оптимизирована работа функций buf2d_filled_rect_by_size buf2d_rect_by_size, добавлены примеры использования библиотеки.

      2358 IgorA 485

      22.09.11 - добавлена функция buf2d_line_sm для рисования сглаженной линии.

      2383 IgorA 486

      20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.

      2658 IgorA 487

      23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp

      488

      11.05.12 - добавлена функция для взятия цвета точки buf2d_get_pixel, доработки в buf2d_set_pixel.

      2759 IgorA 489

      12.06.12 - добавлены функции для рисования воксельной графики.

      2920 IgorA 490

      11.08.12 - функции для сжатия изображений buf2d_img_hdiv2 и buf2d_img_wdiv2 работают с 32 битными буферами.

      2975 IgorA 491

      01.10.12 - добавлена функция поворота изображений на 90 и 180 градусов buf2d_rotate.

      7861 IgorA 492

      15.11.12 - добавлена функция отражения 24 битных изображений по вертикали buf2d_flip_v, исправления в функции buf2d_img_hdiv2.

      3105 IgorA 493

      14.12.12 - добавлена функция наложения фильтра buf2d_filter_dither.

      3138 heavyiron 494

      24.12.12 - добавлены 2 новых алгоритма в функцию наложения фильтра buf2d_filter_dither.

      7861 IgorA 495

      30.01.15 - добавлена поддержка 32 битных буферов в функцию buf2d_flip_v, добавлена функция отражения по горизонтали buf2d_flip_h.

      6175 IgorA 496

      09.02.16 - изменена функция buf2d_resize добавлен дополнительный параметр, который указывает менять ли изображение или размеры буфера.

      7861 IgorA 497

      04.05.20 - функция buf2d_bit_blt может принимать отрицательные координаты в позиции копируемого буфера.

      2383 IgorA 498
      1535 IgorA 499