Функции рисования 2d графики (библиотеки vectors и buf2d)

Discussing libraries simplifying applications development
  • Все, кто реально пишут код, уже понабрали предостаточно проектов.

    Коментарии в коде нужны, чтобы в нём мог разобраться и другой программист. Возможно другой программист сможет улучшить код и исправить ошибки(если они есть).
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Nable
    Я смотрел твои исходники. Однако на все не хватает времени. Если у тебя есть желание сотрудничать - готов предоставить свои спецификации. Просто реально не успеваю всего делать. Если имеешь желание - пиши в личку. Просто писать на форуме в абсолютно не связанной теме - малопродуктивно.
  • IgorA
    Русский, англицкий, cp1251 или cp866 - без разницы, думаю справляться с ними все умеют (хотя если строки в cp866 то и коментарии тоже удобно в cp866 использовать).
    В первую очередь конечно лучше коментировать библиотеку.
  • Немного прокомментировал код библиотеки, и написал еще 1 пример программки.
    Думаю можно было и больше комментариев дать, но пока не очень детально.
    Attachments
    vectors_comment.7z (11.53 KiB)
    Downloaded 458 times
  • Решил сделать библиотеку для работы с 2d буферами, для обработки изображений. Думаю это будет что-то наподобие pixlib, но на asm. Пока возможности ограничены, можно создавать буферы, рисовать в них прямые линии. Также есть функции для рисования (полу)прозрачных изображений поверх других. Возможно в будущем некоторые функции перекочуют из vectors.obj.

    В архиве исходные коды библиотеки и 2 программы: 1-я тестовая, 2-я показывает работу с прозрачностью. Вторая программа использует libimg для получения данных изображения в формате rgb.
    Attachments
    buf2d_100702.7z (124.04 KiB)
    Downloaded 426 times
  • Хорошая идея, так можно шрифты реализовать. :-)
  • новая версия 06.07.10 - расширены возможности функции buf2d_bit_blt, теперь она может рисовать 32 битные буферы. Добавлены 2 новые функции: buf2d_bit_blt_alpha и buf2d_cruve_bezier. Небольшие изменения в функции buf2d_line.
    Mario wrote:Хорошая идея, так можно шрифты реализовать. :-)
    С новой функцией buf2d_bit_blt_alpha станет немного легче реализовать, потому что она рисует прозрачный 8-битный буфер, с заливкой указанным цветом. Т.е. в отличие от buf2d_bit_blt не нужно будет создавать буфер изображения в 24 бита и потом преобразовывать его в 32-битный.
    Attachments
    buf2d_100706.7z (125.83 KiB)
    Downloaded 419 times
  • Новая версия 16.07.10 - исправлено по 2 ошибки в функциях buf2d_img_hdiv2 и buf2d_img_wdiv2, которые могли проявляться при определенных условиях (если размер изображения был кратен 4Кб и др.). Добавлены 2 функции для вывода текста в буфер buf2d_convert_text_matrix и buf2d_draw_text. Добавил пример использования текста.

    Архив уменьшился, потому что для 2-го примера взял другую картинку. Текст выводится в буфер на основе картинки font8x9.bmp из папки с kfar-ом. Можно брать любые картинки со шрифтами, чтобы размер 1-го символа был не более 255 пикселей.
    Attachments
    buf2d_100716.7z (86.81 KiB)
    Downloaded 399 times
  • Новая версия 19.07.10 - добавлена функция рисования окружности buf2d_circle; изменен формат буфера - для ширины и высоты используются 4-х байтные числа вместо 2-х байтных.

    Алгоритм рисования взял с другой темы:

    Code: Select all

    Private Sub Circ(x As Integer, y As Integer, r As Integer)
        Dim i As Integer, px As Double, py As Double
        px = 0: py = r
        For i = 0 To r * 3.1415926 * 2
            PSet (px + x, y - py), vbBlack
            px = px + py / r
            py = py - px / r
        Next
    End Sub
    который предложил tsdima.
    Размеры буфера изменил с 2-х байт до 4-х, для того что-бы снять ограничение максимального размера символов (до 255 пикселей), теперь можно делать больше чем 255.
    Возможно в будущем стоит добавить функцию рисования эллипсов.
    Attachments
    buf2d_100719.7z (89.67 KiB)
    Downloaded 427 times
  • Может пригодится, алгортм Брезенхэма для вычерчивания окружности (без использования чисел с плавающей точкой):

    Code: Select all

    procedure circle(integer x, integer y, integer r, integer color)
        integer px,py,delta
        px = 0
        py = r
        delta = 3-2*r
        while px<=py do
            pixel(color, {x+px, y+py})
            pixel(color, {x+px, y-py})
            pixel(color, {x-px, y+py})
            pixel(color, {x-px, y-py})
            
            pixel(color, {x+py, y+px})
            pixel(color, {x+py, y-px})
            pixel(color, {x-py, y+px})
            pixel(color, {x-py, y-px})
            
            if delta<0 then
                delta += 4*px+6
            else
                delta += 4*(px-py)+10
                py -= 1
            end if
            px += 1
        end while
    end procedure
  • Да такой алгоритм будет полезен, потому что я делал рисование окружности ( в buf2d ) с плавающей точкой. В ближайшее время буду занят, попробую использовать функцию когда освобожусь.
  • спасибо,хороший алгоритм
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Ревизия 2230:
    Добавил новую функцию для рисования сглаженных линий buf2d_line_sm.
    Принимает такие же параметры как и функция buf2d_line.
  • Ревизии 2358 и 2359 исправлена функция для рисования горизонтальной линии, функции рисования рамок и прямоугольников могут принимать отрицательные координаты, некоторые функции могут рисовать и в 8 битные буферы
    Ревизия 2367 немного доработана функция buf_bit_blt_alpha
  • Who is online

    Users browsing this forum: No registered users and 6 guests