-
Equilibrium Keeper
-
-
Вне сайта
-
Мастер
-
-
Скриптер
- Сообщений: 119
- Спасибо получено: 3
-
-
|
EKLib v.1.5
Предисловие:
Вот, наконец, я и закончил вылавливать всех жуков в своем творении и с гордостью, а так же потаенным страхом в душе, могу представить на ваш суд свою библиотеку. Методов в ней уже довольно много . Но действительно стоящих всего два - выдергивание любых кусков из изображения и рисование текста с переносом слов. С последним я мучился особенно долго, но теперь он должен работать, как часы... Смотрите, тестите, оценивайте, пользуйтесь, критикуйте... Только ногами не бейте... или, хотя бы, не по голове... Пожелания и советы - пишите все. Вот...
Методы:
- getImagePartByIndex - Метод возвращает фрагмент изображения.
- intToString - Метод преобразует целое число в строку с заданным количеством знаков.
- changeFont - Метод изменяет все параметры шрифта заданного изображения
- hyphenDrawText - Метод построчно рисует заданный text на bitmap, перенося непомещающиеся слова
- drawFigure - Метод рисует геометрические фигуры на заданном изображении
- findFileExp - Метод возвращает первый найденный файл в директории path, именем filename и расширением взятым из массива exp
Примечание: Подробное описание методов, их параметров, а так же инструкции по применению вы можете найти в теле скрипта.
В следующих версиях планирую:
- Добавить новые фигуры в метод drawFigure.
Скрипт:#==============================================================================
# EK Lib v.1.5
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [[email protected]]
# Created on: 10.09.2008 01:37:16
# Отдельное спасибо: insider, Рольф
# А так же: rpgmaker.sk6.ru, rpg-maker.info, gdsa.rpgmaker.ru
#==============================================================================
# Описание: Библиотека содержит несколько наиболее часто используемых мной
# функций. При желании вы можете воспользоваться ими, но делайте
# это на свой страх и риск.
#------------------------------------------------------------------------------
# Установка: В редакторе скриптов создайте чистую страницу над Main и
# скопируйте туда данный скрипт. В Main создайте новый объект%
# $EKLib = EKLib.new
#==============================================================================
class EKLib
#------------------------------------------------------------------------------
# Метод возвращает фрагмент изображения
# filename : string - имя файла, относительно папки проекта
# index : integer - порядковый номер фрагмента
# width : integer - ширина каждого фрагмента
# height : integer - высота каждого фрагмента
# Примечание: Счет ведется слева направо, сверху вниз; index - с единицы.
def getImagePartByIndex (filename, index, width, height)
bitmap = Bitmap.new (filename)
bitmap_result = Bitmap.new (width, height)
n = bitmap.width / width
x = (index * width - width) - ((index - 1) / n) * width * n
y = ((index - 1) / n) * height
rect = Rect.new(x, y, width, height)
bitmap_result.blt(0, 0, bitmap, rect)
return bitmap_result
end
#------------------------------------------------------------------------------
# Метод преобразует целое число в строку с заданным количеством знаков
# number : integer - число, которое требуется преобразовать
# digits : integer - количество знаков в возвращаемой строке
# filling_symbol : string - символ, заполняющий не достающие знаки
def intToString (number, digits = 3, filling_symbol = 0 )
i = number
counter = number.to_s
for i in number.to_s.size..digits - 1
counter = filling_symbol + counter
i += 1
end
return counter
end
#------------------------------------------------------------------------------
# Метод изменяет все параметры шрифта заданного изображения, если они не указаны,
# возвращает их к значению по умолчанию
# bitmap : bitmap - изображение, для которого изменяются параметры шрифта
# size : integer - размер шрифта
# bold : bool - флаг утолщенности
# italic : bool - флаг курсива
# color : color - цвет шрифта
# name : string / [string] - имя шрифта или массив имен
def changeFont (bitmap, size = 24 , bold = false, italic = false,
color = Color.new(255,255,255,255), name = [ Arial , Courier New , Times New Roman ])
bitmap.font.size = size
bitmap.font.bold = bold
bitmap.font.italic = italic
bitmap.font.color = color
bitmap.font.name = name
end
#------------------------------------------------------------------------------
# Метод построчно рисует заданный text на bitmap, перенося непомещающиеся слова
# text : string - строка (длина не важна), которую требуется записать
# bitmap : bitmap - изображение, на котором будем рисовать
# width : integer - максимальная длина строк
# x : integer - координата x начала первой строки
# y : integer - координата y начала первой строки
# height : integer - высота строки; при некорректном значении, будет высчитана автоматически
def hyphenDrawText (text, bitmap, width, x = 20, y = 20, height = -1)
n = 0
index = 0
strings = []
while n text.size
length = text.size
while bitmap.text_size(text[n, length]).width width
length /= (bitmap.text_size(text[n, length]).width.to_f / width.to_f).to_f
end
strings[index] = text[n, length]
while (strings[index][length - 1, 1] != && strings[index][length - 1, 1] != )
length -= 1
strings[index] = strings[index][0, length]
end
n += length - 1
index += 1
end
for i in 0..strings.size - 1
if strings[i][0, 1] == then strings[i] = strings[i][1, strings[i].size] end
if height (bitmap.font.size.to_f / 1.2).to_f then height = bitmap.text_size(strings[i]).height end
bitmap.draw_text(x, y + height * i, width, height, strings[i])
end
end
#------------------------------------------------------------------------------
# Метод рисует геометрические фигуры на заданном изображении
# bitmap : bitmap - изображение, на котором будем рисовать
# type : string - тип фигуры, которую будем рисовать
# color : color - цвет, который будем использовать, к примеру Color.new(255,255,255,255)
# Прочие параметры изменяются от фигуры к фигуре - смотрим скрипт
# Доступные типы фигур: square = квадрат;
def drawFigure (bitmap, type, color, param1 = 0, param2 = 0, param3 = 0, param4 = 0, param5 = 0, param6 = 0)
case type
when square
filling = param1 # : integer [0, 1] - будем ли заливать квадрат или оставим его пустым
gauge = param2 # : integer - толщина линии, в случае заливки принципиального значения не имеет
x = param3 # : integer - координата x верхнего левого угла квадрата
y = param4 # : integer - координата y верхнего левого угла квадрата
width = param5 # : integer - ширина квадрата
height = param6 # : integer - высота квадрата
if filling != 0
bitmap.fill_rect(x, y, width, height, color)
else
bitmap.fill_rect(x, y, width, gauge, color)
bitmap.fill_rect(x, y, gauge, height, color)
bitmap.fill_rect(x, y + height - gauge, width, gauge, color)
bitmap.fill_rect(x + width - gauge, y, gauge, height, color)
end
end
end
#------------------------------------------------------------------------------
# Метод возвращает первый найденный файл в директории path,
# с именем filename и расширением, взятым из массива exp
# path : string - директория в которой следует производить поиск,
# может быть приравнена к или nil
# filename : string - имя файла или его абсолютный адрес без расширения
# exp : string / [string] - одна из констант, передаваемая в виде строки
# или массив возможных расширений файла
# Константы для exp: images = изображения; audio = аудио.
def findFileExp (path, filename, exp)
if filename == nil || filename ==
return false
end
if path == nil then path = end
if exp == images
exp = [ png , jpg , bmp ]
elsif exp == audio
exp = [ mp3 , wav , ogg , wma ]
end
for i in 0..exp.size - 1
if FileTest.exist?(path + filename + . + exp[i])
return (filename + . + exp[i])
end
end
return false
end
#------------------------------------------------------------------------------
end
|