Новые функции и изменения CreaGraFix v.004:
- автоматическое переключение на карандаш при выборе цвета независимо от текущего режима рисования/стерания;
- палитра для 16 своих цветов (их значения можно выбирать самостоятельно);
- образец цвета увеличенный;
- поля отображающие значения состовляющих RGB для текущего цвета;
- поля для уменьшения/увеличения значений для каждой составляющей цвета (RGB): на единицу;
- поля для уменьшения/увеличения значений для каждой составляющей цвета (RGB): на десять единиц;
- режим "пипетка" - выбор цвета из картинки для палитры своих цветов (сначала нужно выбрать один из "своих" цветов) ;
- выделение "перекрестием" на изображении выбранного пипеткой пикселя;
- автоматическое определение палитры (первые 16 цветов) текущего кадра (пока работает не всегда корректно);
- перемещение загруженной анимации(нарисованное поверх не затрагивается) в рабочей области;
- масштабирование загруженной анимации(нарисованное поверх не затрагивается);
- сохранение изображения и анимации после масштабирования и перемещения (txt и gif );
- рисование поверх уменьш/увеличенного кадра анимации (стерка работает только для нарисованного);
- исправлен баг с неточной передачей цвета при записи изображения в формате gif;
- исправлен баг при повторном выборе режима "стерка" (цвет карандаша назначался прозрачным).
И все же, в некоторых загруженных анимациях по непонятной для меня причине невозможны операции с кадрами... Проблема думаю решится, когда перепишу работу с кадрами по другому алгоритму.
Code: Select all
//© Al_Rado GNU GPL 2.0// CreaGraFix // Графический редактор
ver = "v.004" // версия релиза
date = "10.07.08" // дата релиза
//*********************УСТАНОВКА ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ************************
x_window = 320 // ширина окна
y_window = 240 // высота окна
resize_pixi (0,x_window,y_window)
scr_mask = new_pixi(x_window,y_window,1)
MAKE_LOGOS // создаю лого и картинки
// ширина и высота рабочего поля
widh_wind = 200
high_wind = 200
// ширина и высота, переменные для изменения размеров рабочего поля
widh_wind_t = widh_wind
high_wind_t = high_wind
// координаты Х и Y для рабочего поля
x_wind = -widh_wind/2
y_wind = -high_wind/2
anim_frames = 1 // количество кадров в анимации
anim_frames_t = anim_frames // переменная для изменения количества кадров в анимации
color_alfa = #FFFFF0 // прозрачный цвет по умолчанию
animat = new_pixi( widh_wind, high_wind, anim_frames ) // Pixi-контейнер анимации
n=0 while n<(widh_wind*high_wind) {
animat [ n ] = color_alfa
n+1
}
pixi_transp (animat,1,color_alfa)
tmp_frame = new_pixi( widh_wind, high_wind, 1 ) // временный кадр анимации
n=0 while n<(widh_wind*high_wind) {
tmp_frame [ n ] = color_alfa
n+1
}
pixi_transp (tmp_frame,1,color_alfa)
tmp_layer = clone_pixi ( animat, 1 )
frame_num = 0 // текущий кадр
x_frame_num = -4 // координата для нумерации текущего кадра, меняется если количество больше 9
frame_time = 100 // время отображеня кадра анимации (общее для всех кадров)
play_anim = 0 // флаг, три состояния: -1 - проигрывание анимации в обратном порядке, 0 - нет проигрывания, 1 - нормальное проигрывание
color_brush = BLACK // цвет кисти (карандаш или стерка)
color_brush_tmp = color_brush // переменная в которой хранится значение цвета карандаша при смене режима на стерку
color_fon = #999999 // цвет фона для симметричного рисования
bright_fon = 128 // яркость фона для симметричного рисования
mode_fon = -1 // флаг, вкл/выкл направляющие (фон для симметричного рисования): -1 - вкл, 1 - выкл
size_brush = 1 // размер карандаша/стерки
mode_sym = 1 // режим симметричного рисования (значения от 1 до 5)
mode_br = 1 // режим кисточки: 1 - карандаш, 2 - стерка
mode_pip = -1 // режим пипетки: -1 - выключен, 1 - включен
zakladka = 5 // текущая закладка
// переменные координат X и Y для расположения картинки
x_tmp = 0
y_tmp = 0
info = 0 // флаг, показывать инф. о программе: 0 - нет, 1 - да
stop_export_gif = 0 // флаг останова экспорта в gif, 0 - нет останова, 1 - остановить экспорт
stop_export_avi = 0 // флаг останова экспорта в avi, 0 - нет останова, 1 - остановить экспорт
status_export_avi = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт
status_export_gif = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт
frame_exp = 0 // количество экспортированных кадров
fraq = 0 // частота кадров при экспорте в Gif
scale_tmp = 0 // масштаб картинки
fon = new_pixi (10,10,1)// фон-пустышка
// параметры фонового изображения: координата X и Y, масштаб
x_fon = 0
y_fon = 0
scale_fon = 0
wiev_fon_flag = 1 // флаг отображения фона: -1 - не отображать, 1 - отображать
wiev_fon = 1 // режим отображения фона: 1 - постоянно отображать, 2 - только во время рисования
bright_fon_img = 128 // яркость отображения фоновой картинки
// три массива значений для палитры из 16 цветов. Красная, зеленая и синяя состовляющие соответственно
color_R = new_array(16)
color_G = new_array(16)
color_B = new_array(16)
n=0
color_R[n] = 255 color_G[n] = 255 color_B[n] = 255 n+1
color_R[n] = 172 color_G[n] = 234 color_B[n] = 136 n+1
color_R[n] = 208 color_G[n] = 220 color_B[n] = 113 n+1
color_R[n] = 171 color_G[n] = 171 color_B[n] = 171 n+1
color_R[n] = 122 color_G[n] = 191 color_B[n] = 199 n+1
color_R[n] = 187 color_G[n] = 119 color_B[n] = 109 n+1
color_R[n] = 104 color_G[n] = 169 color_B[n] = 65 n+1
color_R[n] = 128 color_G[n] = 128 color_B[n] = 128 n+1
color_R[n] = 124 color_G[n] = 112 color_B[n] = 218 n+1
color_R[n] = 144 color_G[n] = 95 color_B[n] = 37 n+1
color_R[n] = 141 color_G[n] = 71 color_B[n] = 179 n+1
color_R[n] = 84 color_G[n] = 84 color_B[n] = 84 n+1
color_R[n] = 140 color_G[n] = 62 color_B[n] = 52 n+1
color_R[n] = 87 color_G[n] = 66 color_B[n] = 0 n+1
color_R[n] = 62 color_G[n] = 49 color_B[n] = 162 n+1
color_R[n] = 0 color_G[n] = 0 color_B[n] = 0
NUL_COLOR
// координаты ячейки текущего цвета карандаша (черный по умолчанию)
x_color = -155+3*13
y_color = -80+3*13
loop = 1 // зацикливание анимации: -1 - нет, 1 - есть
color_num = -1 // номер цвета в палитре своих цветов, 0-15, равен -1 если активны другие палитры
//***************************ГЛАВНЫЙ ЦИКЛ*************************************
start:
clear (SNEG)
if wiev_fon_flag > 0 & wiev_fon = 1 { transp (bright_fon_img) fpixi (fon,x_fon,y_fon,0,scale_fon,0) transp (256) } // вывод фонового изображения (постоянно).
SYMM_FON // вывод фона с направляющими для симметричного рисования (постоянно).
// проверка: есть ли запись
if save_flag=1 {SAVE_ANIM}
if save_flag=2 {SAVE_GIF}
if save_flag=3 {SAVE_TXT}
if save_flag=4 { EXPORT_AVI start_timer (0) start_timer (1) }
if save_flag=5 { EXPORT_GIF start_timer (0) start_timer (1) }
if stop_export_gif = 1 {stop_video_export stop_export_gif = 0 }
if stop_export_avi = 1 {stop_video_export stop_export_avi = 0 }
// проверка: показывать инфо
if info = 1 {INFO_ABOUT}
// печать текущего кадра Pixi-контейнера
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
fpixi ( tmp_layer, 0, 0, 0, 0, frame_num )
// вывод "перекрестия"
if mode_pip > 0 & color_num >= 0 {
ccc = get_dot(get_pen_x, get_pen_y)
line ( get_pen_x-5, get_pen_y, get_pen_x+5, get_pen_y, BLACK )
line ( get_pen_x, get_pen_y-5, get_pen_x, get_pen_y+5, BLACK )
box ( get_pen_x-2, get_pen_y-2, 4, 4, WHITE )
fbox ( get_pen_x-2, get_pen_y-2, 4, 4, ccc )
}
// закрываю все, кроме рабочего поля
MASK_WORKSPACE
// обработать мышку (стилус)
handle_keys({play_anim = 0 DRAWING BOTTOM ZAKL},{DRAWING},{DRAWING})
DRAW_ZAKLAD // отрисовка закладок
DRAW_MENU // отрисовка менюшек и кнопок
PLAY_ANIMAT // проверка: проигрывать анимацию
// если идет запись в Gif файл, то сохраняются кадры через n-ное время, иначе просто перерисовываю экран
if stop_export_gif = 0 & status_export_gif = 1 { pause_video_export frame (fraq) frame_exp+1 resume_video_export frame (0)} else { frame(0) }
goto start
//***********************ПОДПРОГРАММА ОТРИСОВКИ ЗАКЛАДОК************************
DRAW_ZAKLAD:
fbox(-160,-120,320,16,#AAAAAA)
box(-160,-118,52,14,WHITE)
box(-160+54*1,-118,52,14,WHITE)
box(-160+54*2,-118,52,14,WHITE)
box(-160+54*3,-118,52,14,WHITE)
box(-160+54*4,-118,52,14,WHITE)
box(-160+54*5,-118,52,14,WHITE)
fbox(-162+54*zakladka,-120,58,20,WHITE)
print (" ФАЙЛ АНИМ ЦВЕТ КИСТЬ ФОН РИС", -160, -114, BLACK)
ret
//***********************ПОДПРОГРАММА ОТРИСОВКИ КНОПОК************************
DRAW_MENU:
// кнопка информация о программе
fbox( 148, 108, 12, 12, #AAAAAA )
print ("?",150,110,WHITE)
// отрисовка кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
TIMELINE
// закладка ----------ФАЙЛ----------
if zakladka = 0 {
// отгораживаю разные поля меню
fbox(-160,0,60,2,BLACK)
fbox(100,0,60,2,BLACK)
// область новых размеров
if widh_wind > 200 { box( -100 , -100 , 200 , 200 , RED ) } else {box( -widh_wind_t/2 , -high_wind_t/2 , widh_wind_t , high_wind_t , RED )}
// отрисовка кнопок
print("
О_АНИМ
О_JPEG
О_GIF
"
,-155,-100, BLACK)
box(-159,-95,56,12,BLACK)
box(-159,-79,56,12,BLACK)
box(-159,-63,44,12,BLACK)
print("
ШИР/ВЫС
< >
КАДРЫ
< >
НОВ_АН
ПЕРЕСЧ
"
,-155,5, BLACK)
print("$widh_wind_t",-143,29,BLACK)
print("$anim_frames_t",-140,61,BLACK)
box(-159,26,12,12,BLACK)
box(-116,26,12,12,BLACK)
box(-159,58,12,12,BLACK)
box(-116,58,12,12,BLACK)
box(-159,74,56,12,BLACK)
box(-159,90,56,12,BLACK)
box(104,-95,52,12,BLACK)
box(104,-79,52,12,BLACK)
box(104,-63,44,12,BLACK)
print("
C_АНИМ
C_GIF
С_TXT
"
,106,-100, BLACK)
fbox(102,8,48,28,#CCCCCC)
fbox(104,10,44,12,WHITE)
fbox(102,40,57,39,#CCCCCC)
fbox(104,42,44,12,WHITE)
fbox(104,65,10,12,WHITE)
fbox(130,65,10,12,WHITE)
// если идет запись рисования в AVI, подсвечиваю кнопку СТОП красным и вывожу секундомер
if status_export_avi = 1 {
fbox(104,83,44,12,RED)
s = get_timer(0)/1000
if s > 60 { start_timer (0) }
m = get_timer(1)/60000
print( "$m:$s c", 110, 27, BLUE )
} else { box(104,83,44,12,RED) print( "0:0 c", 110, 27, BLUE )}
// если идет запись рисования в GIF, подсвечиваю кнопку СТОП красным и вывожу количество записанных кадров
if status_export_gif = 1 {
fbox(104,83,44,12,RED)
print( "$frame_exp", 110, 56, BLUE )
print( " K", 110, 56, BLUE )
print( " Гц", 110, 69, BLUE )
} else {
frame_exp = 0
box(104,83,44,12,RED)
print( "000 K", 110, 56, BLUE )
print( " Гц", 110, 69, BLUE )}
print("
Э_AVI
Э_GIF
< >
СТОП
"
,106,5, BLACK)
if fraq != 0 {fraq_per_s = 1000/fraq} else {fraq_per_s = 24}
print("$fraq_per_s",114,69, BLACK)
// расположение и масштаб картинки
print ("
В
Л П
Н
", -156, -40, BLUE)
box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)
print ("
+
- +
-
", 111, -40, BLUE)
box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)
}
// закладка ----------АНИМАЦИЯ----------
if zakladka = 1 {
print("
ВР:
+
-
"
,-154,-100, BLACK)
print("$frame_time", -130, -92, BLACK)
box(-157,-95,54,12,BLACK)
box(-157,-79,44,12,BLACK)
box(-157,-63,44,12,BLACK)
print("
ОЧИС_К
УДАЛ_К
КОПИ_К
ВСТА_К
ДОБА_К
"
,106,5, BLACK)
box(104,10,52,12,BLACK)
box(104,26,52,12,BLACK)
box(104,42,52,12,BLACK)
box(104,58,52,12,BLACK)
box(104,74,52,12,BLACK)
}
// закладка ----------ЦВЕТ-----------
if zakladka = 2 {
if mode_pip < 0 { box( 101 ,67 , 58, 12, BLACK ) } else { fbox( 101 ,67 , 58, 12, RED ) }
print ("ПИПЕТКА",103,70, BLACK)
print ("АВТО_ЦВ",103,84, BLACK)
box( 101 ,81 , 58, 12, BLACK )
print ("Т.ЦВЕТ",105,-90, BLACK)
fbox( 110 ,-79 , 42, 14, color_brush )
box( 110 ,-79 , 42, 14, BLACK )
box( 112 ,-77 , 38, 10, get_color ( 256-get_red (color_brush)/2, 256-get_green (color_brush)/2, 256-get_blue(color_brush)/2 ) )
box( 109 ,-80 , 44, 16, BLACK )
fbox( 116 ,-59 , 30, 10, RED )
fbox( 116 ,-47 , 30, 10, GREEN )
fbox( 116 ,-35 , 30, 10, BLUE )
red = get_red(color_brush)
green = get_green(color_brush)
blue = get_blue(color_brush)
print ("$red" ,119,-57,BLACK)
print ("$green" ,118,-45,BLACK)
print ("$blue" ,119,-33,BLACK)
print ("$red" ,118,-58,WHITE)
print ("$blue" ,118,-34,WHITE)
fbox( 100 ,-59 , 7, 10, #AAAAAA ) fbox( 153 ,-59 , 7, 10, #AAAAAA ) // на десяток меньше/больше
box( 106 ,-59 , 9, 10, BLACK ) box( 145 ,-59 , 9, 10, BLACK ) // на единицу меньше/больше
fbox( 100 ,-47 , 7, 10, #AAAAAA ) fbox( 153 ,-47 , 7, 10, #AAAAAA ) // на десяток меньше/больше
box( 106 ,-47 , 9, 10, BLACK ) box( 145 ,-47 , 9, 10, BLACK ) // на единицу меньше/больше
fbox( 100 ,-35 , 7, 10, #AAAAAA ) fbox( 153 ,-35 , 7, 10, #AAAAAA ) // на десяток меньше/больше
box( 106 ,-35 , 9, 10, BLACK ) box( 145 ,-35 , 9, 10, BLACK ) // на единицу меньше/больше
print("<<",100,-57,BLACK) print(">>",145,-57,BLACK)
print("<<",100,-45,BLACK) print(">>",145,-45,BLACK)
print("<<",100,-33,BLACK) print(">>",145,-33,BLACK)
print ("СВОИ ЦВ",103,-7, BLACK) // отрисовываю свои цвета
l=0
n=0 while n<4 {
m=0 while m<4{
fbox( 105+m*13 ,3+n*13 , 12, 12, get_color ( color_R_own[l], color_G_own[l], color_B_own[l] ) )
m+1 l+1
}
n+1
}
print ("16 цв",-150,-90, BLACK) // отрисовываю палитру 16 цветов
l=0
n=0 while n<4 {
m=0 while m<4{
fbox( -155+m*13 ,-80+n*13 , 12, 12, get_color ( color_R[l], color_G[l], color_B[l] ) )
m+1 l+1
}
n+1
}
print ("16 сер",-152,-7, BLACK) // отрисовываю палитру 16 градаций серого
l=0
n=1 while n<5 {
m=1 while m<5{
fbox( -168+m*13, -10+n*13, 12, 12, get_color ( 256-16*l , 256-16*l , 256-16*l ) )
m+1 l+1
}
n+1
}
box ( x_color , y_color , 12, 12, get_color ( 256-get_red (color_brush), 256-get_green (color_brush), 256-get_blue(color_brush) ) )
box ( x_color+2 , y_color+2 , 8, 8, get_color ( 256-get_red (color_brush)/2, 256-get_green (color_brush)/2, 256-get_blue(color_brush)/2 ) )
}
// закладка ----------КИСТЬ----------
if zakladka = 3 {
}
// закладка ----------ФОН------------
if zakladka = 4 {
// отрисовка кнопок
print("
О_ФОН
"
,-155,-100, BLACK)
box(-159,-95,56,12,BLACK)
print ("
В
Л П
Н
", -156, -40, BLUE)
box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)
print ("
+
- +
-
", 111, -40, BLUE)
box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)
if wiev_fon_flag > 0 { fbox(105,-90,48,12,#CCCCCC) } else { box(105,-90,48,12,BLACK) }
print (
"
ПОКАЗ
",110,-95,BLACK)
print("
<ЯРК>
"
,107,-17, BLACK)
box(104,4,10,12,BLACK)
box(139,4,10,12,BLACK)
}
// закладка --------РИСОВАНИЕ--------
if zakladka = 5 {
// отрисовка режима рисования и настроек карандаша/стерки
if mode_br = 1 {
fbox(-150,-100,40,100,#CCCCCC)
fbox(-148,-79,37,15,#EEEEEE)
box(-147,-77,10,10,BLACK)
box(-124,-77,10,10,BLACK)
print("
< >
"
,-155,-83, BLACK)
fbox(-130-size_brush/2,-72-size_brush/2, size_brush, size_brush,color_brush)
if size_brush>2 {box(-130-size_brush/2,-72-size_brush/2, size_brush, size_brush,BLACK)}
} else {
fbox(-150,0,40,100,#CCCCCC)
fbox(-148,69,37,15,#AAAAAA)
box(-147,71,10,10,BLACK)
box(-124,71,10,10,BLACK)
print("
< >
"
,-155,65, BLACK)
fbox(-130-size_brush/2,76-size_brush/2, size_brush, size_brush,WHITE)
}
pixi (karand,-130,0,1,128)
// отрисовка кнопок
print("
ОЧИСТ
"
,106,-95, BLACK)
box(104,-90,52,12,BLACK)
// отрисовать кнопку цветом фона направляющих, если отображение направляющих разрешено
if mode_fon = 1 {
transp (64)
fbox(104,-63+16*mode_fon,44,12,color_fon)
transp (256)
}
print("
НАПР
<ЯРК>
"
,107,-52, BLACK)
box(104,-47,44,12,BLACK)
box(104,-31,10,12,BLACK)
box(139,-31,10,12,BLACK)
fbox(104,-11+16*mode_sym,52,12,#CCCCCC)
print("
ПРОСТО
ВЕРТИК
ГОРИЗО
ЗЕРКАЛ
ЧЕТЫРЕ
"
,106,0, BLACK)
box(104,5,52,12,BLACK)
box(104,21,52,12,BLACK)
box(104,37,52,12,BLACK)
box(104,53,52,12,BLACK)
box(104,69,52,12,BLACK)
}
// рамки, обозначения области меню и вокруг кадра
box( -100 , -100 , 200 , 200 , #AAAAAA )
if widh_wind > 200 { box( -100 , -100 , 200 , 200 , BLUE ) } else {box( x_wind , y_wind , widh_wind , high_wind , BLUE )}
SCREENSHOT_MASK
ret
// Подпрограмма отрисовки кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
TIMELINE:
fbox(-100,103,23,12,#AAAAAA)
fbox(77,103,26,12,#AAAAAA)
if loop=1 {fbox(121,103,12,12,#CCCCCC) } // если включено зацикливание проигрывания анимации, подсвечиваю кнопку
print("I< << < > >> >I L", -76, 106, BLACK)
print("- +", -110, 106, BLACK)
print("1", -94, 106, BLACK)
temp = anim_frames
print("$temp", 82, 106, BLACK)
if frame_num >= anim_frames { frame_num = anim_frames temp = frame_num } else { temp = frame_num+1 }
if temp > 9 { x_frame_num = -9 } else { x_frame_num = -4 }
print("$temp", x_frame_num, 106, BLACK)
box(-77,103,20,12,BLACK)
box(-54,103,20,12,BLACK)
box(-31,103,20,12,BLACK)
box(9,103,20,12,BLACK)
box(33,103,20,12,BLACK)
box(56,103,20,12,BLACK)
box(-113,103,12,12,BLACK)
box(103,103,12,12,BLACK)
box(121,103,12,12,BLACK)
ret
//************************ПОДПРОГРАММА ОПРОСА ЗАКЛАДОК******************************
ZAKL:
if gpr( -160,-118,52,14 ) { zakladka = 0 }
if gpr( -160+54*1,-118,52,14 ) { zakladka = 1 }
if gpr( -160+54*2,-118,52,14 ) { zakladka = 2 }
if gpr( -160+54*3,-118,52,14 ) { zakladka = 3 }
if gpr( -160+54*4,-118,52,14 ) { zakladka = 4 }
if gpr( -160+54*5,-118,52,14 ) { zakladka = 5 }
ret
//****************
//**************************
//*************************************
//************************ПОДПРОГРАММА ОПРОСА КНОПОК********************************
BOTTOM:
// информация о программе
if gpr( 148, 108, 12, 12, ) { info = 1 }
// опрос кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
if anim_frames > 1 {
if gpr(-31,103,20,12) { frame_num - 1 if frame_num < 0 { frame_num = 0 } }
if gpr(9,103,20,12) { frame_num + 1 if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }}
}
if gpr(-54,103,20,12) { play_anim = -1 }
if gpr(33,103,20,12) { play_anim = 1 }
if gpr(-77,103,20,12) { frame_num = 0 }
if gpr(56,103,20,12) { frame_num = anim_frames-1 }
if gpr(121,103,12,12) { loop = -loop }
// удаляю кадр
if gpr(-113,103,12,12) {
tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
tmp_layer_q = new_pixi( widh_wind, high_wind, anim_frames-1 )
n=0 while n<(widh_wind*high_wind*anim_frames+1) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
n=0 while n<(widh_wind*high_wind)*frame_num {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer[ n ]
n+1
}
if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer[ n ]
n+1
}
}
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
anim_frames = get_pixi_frames(animat)
if frame_num = anim_frames { frame_num-1 }
if frame_num < 0 { frame_num = 1 }
if frame_num > anim_frames { frame_num = anim_frames }
TIMELINE
}
//добавляю кадр
if gpr(103,103,12,12) {
tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
tmp_layer_q = new_pixi( widh_wind, high_wind, anim_frames+1 )
n=0 while n<(widh_wind*high_wind*anim_frames+1) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
n=0 while n<(widh_wind*high_wind)*anim_frames {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer[ n ]
n+1
}
n=((widh_wind*high_wind)*anim_frames) while n<(widh_wind*high_wind)*(anim_frames+1) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
anim_frames = get_pixi_frames(animat)
TIMELINE
}
// закладка ----------ФАЙЛ----------
if zakladka = 0 {
mode_pip= -1
if gpr(-159,-95,56,12) {LOAD_ANIM} // открыть файл анимации
if gpr(-159,-79,56,12) {LOAD_JPEG} // открыть файл Jpeg и вставить его в кадр
if gpr(-159,-63,44,12) {LOAD_GIF} // открыть файл Gif и вставить его в кадр
if gpr(104,-95,52,12) {save_flag = 1} // записать файл анимации
if gpr(104,-79,52,12) {save_flag = 2} // записать кадр в .gif файл
if gpr(104,-63,44,12) {save_flag = 3} // записать кадр в .txt файл
if gpr(104,10,44,12) { save_flag = 4 } // записать процесса рисования в .avi файл
if gpr(104,42,44,12) { save_flag = 5 } // записать процесса рисования в .gif файл
if gpr(104,83,44,12) { stop_export_gif = 1 stop_export_avi = 1 status_export_avi = 0 status_export_gif = 0 } // останов записи
if gpr(104,65,10,12) { fraq+100 if fraq>1000 { fraq=1000 } } // уменьшение частоты кадров при экспорте в .gif файл
if gpr(130,65,10,12) { fraq-100 if fraq<0 { fraq=0 }} // увеличение частоты кадров при экспорте в .gif файл
// переместить изображение по кадру и изменить размер
if gpr(-142,-34,12,12) { y_tmp-4 ON_BACKGROUND } // выше
if gpr(-158,-26,12,12) { x_tmp-4 ON_BACKGROUND } // левее
if gpr(-126,-26,12,12) { x_tmp+4 ON_BACKGROUND } // правее
if gpr(-142,-18,12,12) { y_tmp+4 ON_BACKGROUND } // ниже
if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_tmp+4 ON_BACKGROUND } // увеличение высоты и ширины
if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_tmp-4 ON_BACKGROUND } // уменьшение высоты и ширины
// изменение размеров Pixi-контейнера (ширина = высота)
if gpr( -159,26,12,12 ) { // <
if widh_wind_t > 4 {
widh_wind_t - 1
high_wind_t - 1
} else { widh_wind_t = 4 high_wind_t = 4 }
}
if gpr( -116,26,12,12 ) { // >
if widh_wind_t < 200 {
widh_wind_t + 1
high_wind_t + 1
} else { widh_wind_t = 200 high_wind_t = 200 }
}
// изменение кадров в анимации
if gpr( -159,58,12,12 ) { // <
if anim_frames_t > 1 {
anim_frames_t - 1
} else { anim_frames_t = 1 }
}
if gpr( -116,58,12,12 ) { // >
if anim_frames_t < 256 {
anim_frames_t + 1
} else { anim_frames_t = 256 }
}
// создание новой анимации на основе данных
if gpr( -159,74,56,12 ) {
tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
tmp_layer_q = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
//pixi_transp (animat,1,color_alfa)
//pixi_transp (tmp_layer,1,color_alfa)
widh_wind = get_pixi_xsize (animat)
widh_wind_t = widh_wind
high_wind = get_pixi_ysize (animat)
high_wind_t = high_wind
anim_frames = get_pixi_frames(animat)
anim_frames_t = anim_frames
x_wind = -widh_wind/2
y_wind = -high_wind/2
}
// пересчет существующей анимации
if gpr( -159,90,56,12 ) {
tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
tmp_layer_q = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
// если размеры не поменялись, пересчет кадров
if widh_wind_t = widh_wind {
n=0 while n<(widh_wind_t*high_wind_t)*anim_frames_t {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer [ n ]
n+1
}
}
// если введенная информация меньше существующего размера - уменьшение размеров Pixi-контейнера
if widh_wind_t < widh_wind {
l=0 while (l<anim_frames_t) {
m=0 while (m<high_wind_t) {
n=0 while (n<widh_wind_t) {
tmp_pixi [ n + widh_wind_t*m + (widh_wind_t*high_wind_t)*l ] = animat[ (n+(widh_wind/2-widh_wind_t/2)) + (widh_wind*(m+high_wind/2-high_wind_t/2)) + (widh_wind*high_wind)*l ]
tmp_layer_q [ n + widh_wind_t*m + (widh_wind_t*high_wind_t)*l ] = tmp_layer [ (n+(widh_wind/2-widh_wind_t/2)) + (widh_wind*(m+high_wind/2-high_wind_t/2)) + (widh_wind*high_wind)*l ]
n+1
}
m+1
}
l+1
}
}
// если введенная информация больше существующего размера - увеличение размеров Pixi-контейнера
if widh_wind_t > widh_wind {
l=0 while (l<anim_frames_t) {
m=0 while (m<high_wind) {
n=0 while (n<widh_wind) {
tmp_pixi [ (n+(widh_wind_t/2-widh_wind/2)) + (widh_wind_t*(high_wind_t/2-high_wind/2+m)) + (widh_wind_t*high_wind_t)*l ] = animat [ n + widh_wind*m + (widh_wind*high_wind)*l ]
tmp_layer_q [ (n+(widh_wind_t/2-widh_wind/2)) + (widh_wind_t*(high_wind_t/2-high_wind/2+m)) + (widh_wind_t*high_wind_t)*l ] = tmp_layer [ n + widh_wind*m + (widh_wind*high_wind)*l ]
n+1
}
m+1
}
l+1
}
}
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
//pixi_transp (animat,1,color_alfa)
widh_wind = get_pixi_xsize (animat)
widh_wind_t = widh_wind
high_wind = get_pixi_ysize (animat)
high_wind_t = high_wind
anim_frames = get_pixi_frames(animat)
anim_frames_t = anim_frames
x_wind = -widh_wind/2
y_wind = -high_wind/2
if frame_num = anim_frames_t { frame_num-1 }
if frame_num < 0 { frame_num = 1 }
if frame_num > anim_frames_t { frame_num = anim_frames_t }
fpixi( animat, 0, 0, 0, 0, frame_num )
}
}
// закладка ----------АНИМАЦИЯ----------
if zakladka = 1 {
mode_pip= -1
// задаю время показа кадра в милисекундах
if gpr(-157,-79,44,12) { frame_time + 100 if frame_time > 10000 { frame_time = 10000 } }
if gpr(-157,-63,44,12) { frame_time - 100 if frame_time < 0 { frame_time = 0 } }
// очищаю кадр
if gpr(104,10,52,12) {
n=0 while n<(widh_wind*high_wind) {
animat[((widh_wind*high_wind)*frame_num)+n] = color_alfa
tmp_layer[((widh_wind*high_wind)*frame_num)+n] = color_alfa
n+1
}
}
// удаляю кадр
if gpr(104,26,52,12) {
tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
tmp_layer_q = new_pixi( widh_wind, high_wind, anim_frames-1 )
n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
n=0 while n<(widh_wind*high_wind)*frame_num {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer [ n ]
n+1
}
if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
tmp_pixi [ n ] = animat[ n+(widh_wind*high_wind) ]
tmp_layer_q [ n ] = tmp_layer[ n+(widh_wind*high_wind) ]
n+1
}
}
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
anim_frames = get_pixi_frames(animat)
if frame_num = anim_frames { frame_num-1 }
if frame_num < 0 { frame_num = 1 }
if frame_num > anim_frames { frame_num = anim_frames }
}
// копирую кадр в буфер
if gpr(104,42,52,12) {
tmp_frame = new_pixi( widh_wind, high_wind, 1 )
tmp_layer_q = new_pixi( widh_wind, high_wind, 1 )
n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
tmp_frame [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_frame,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
n=0 while n<(widh_wind*high_wind) {
tmp_frame [ n ] = animat[ ((widh_wind*high_wind)*frame_num) + n ]
tmp_layer_q [ n ] = tmp_layer [ ((widh_wind*high_wind)*frame_num) + n ]
n+1
}
}
//вставляю содержимое буфера
if gpr(104,58,52,12) {
n=0 while n<(widh_wind*high_wind) {
animat[ ((widh_wind*high_wind)*frame_num) + n ] = tmp_frame [ n ]
tmp_layer [ ((widh_wind*high_wind)*frame_num) + n ] = tmp_layer_q [ n ]
n+1
}
}
//добавляю кадр
if gpr(104,74,52,12) {
tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
tmp_layer_q = new_pixi( widh_wind, high_wind, anim_frames+1 )
n=0 while n<(widh_wind*high_wind*anim_frames+1) {
tmp_pixi [ n ] = color_alfa
tmp_layer_q [ n ] = color_alfa
n+1
}
pixi_transp (tmp_pixi,1,color_alfa)
pixi_transp (tmp_layer_q,1,color_alfa)
n=0 while n<(widh_wind*high_wind)*frame_num {
tmp_pixi [ n ] = animat[ n ]
tmp_layer_q [ n ] = tmp_layer[ n ]
n+1
}
if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
tmp_pixi [ n+(widh_wind*high_wind) ] = animat[ n ]
tmp_layer_q [ n+(widh_wind*high_wind) ] = tmp_layer[ n ]
n+1
}
}
remove_pixi ( animat )
animat = clone_pixi ( tmp_pixi,1 )
tmp_layer = clone_pixi ( tmp_layer_q, 1 )
anim_frames = get_pixi_frames(animat)
}
}
// закладка ----------ЦВЕТ-----------
if zakladka = 2 {
l=0
n=0 while n<4 {
m=0 while m<4{
if gpr( 105+m*13 ,3+n*13 , 12, 12 ) { color_brush = get_color ( color_R_own[l], color_G_own[l], color_B_own[l] ) x_color = 105+m*13 y_color = 3+n*13 color_num = l mode_br = 1 }
m+1 l+1
}
n+1
}
l=0
n=0 while n<4 {
m=0 while m<4{
if gpr( -155+m*13 ,-80+n*13 , 12, 12 ) { color_brush = get_color ( color_R[l], color_G[l], color_B[l] ) x_color = -155+m*13 y_color = -80+n*13 color_num = -1 mode_br = 1 }
m+1 l+1
}
n+1
}
l=0
n=1 while n<5 {
m=1 while m<5{
if gpr( -168+m*13, -10+n*13, 12, 12 ) { color_brush = get_color ( 256-16*l, 256-16*l, 256-16*l ) x_color = -168+m*13 y_color = -10+n*13 color_num = -1 mode_br = 1 }
m+1 l+1
}
n+1
}
mode_br = 1
if color_num >= 0 { // если выбран цвет из палитры своих цветов, то можно менять значение состовляющих цвета
// меняю состовляющую цвета RED
if gpr ( 106 ,-59 , 9, 10 ) { color_R_own[color_num]=color_R_own[color_num]-1 } // уменьшение значения на 1
if gpr ( 145 ,-59 , 9, 10 ) { color_R_own[color_num]=color_R_own[color_num]+1 } // увеличение значения на 1
if gpr ( 100 ,-59 , 7, 10 ) { color_R_own[color_num]=color_R_own[color_num]-10 } // уменьшение значения на 10
if gpr ( 153 ,-59 , 7, 10 ) { color_R_own[color_num]=color_R_own[color_num]+10 } // увеличение значения на 10
// меняю состовляющую цвета GREEN
if gpr ( 106 ,-47 , 9, 10 ) { color_G_own[color_num]=color_G_own[color_num]-1 } // уменьшение значения на 1
if gpr ( 145 ,-47 , 9, 10 ) { color_G_own[color_num]=color_G_own[color_num]+1 } // увеличение значения на 1
if gpr ( 100 ,-47 , 7, 10 ) { color_G_own[color_num]=color_G_own[color_num]-10 } // уменьшение значения на 10
if gpr ( 153 ,-47 , 7, 10 ) { color_G_own[color_num]=color_G_own[color_num]+10 } // увеличение значения на 10
// меняю состовляющую цвета BLUE
if gpr ( 106 ,-35 , 9, 10 ) { color_B_own[color_num]=color_B_own[color_num]-1 } // уменьшение значения на 1
if gpr ( 145 ,-35 , 9, 10 ) { color_B_own[color_num]=color_B_own[color_num]+1 } // увеличение значения на 1
if gpr ( 100 ,-35 , 7, 10 ) { color_B_own[color_num]=color_B_own[color_num]-10 } // уменьшение значения на 10
if gpr ( 153 ,-35 , 7, 10 ) { color_B_own[color_num]=color_B_own[color_num]+10 } // увеличение значения на 10
if color_R_own[color_num]<0 { color_R_own[color_num]=0 }
if color_R_own[color_num]>255 { color_R_own[color_num]=255 }
if color_G_own[color_num]<0 { color_G_own[color_num]=0 }
if color_G_own[color_num]>255 { color_G_own[color_num]=255 }
if color_B_own[color_num]<0 { color_B_own[color_num]=0 }
if color_B_own[color_num]>255 { color_B_own[color_num]=255 }
color_brush = get_color ( color_R_own[color_num], color_G_own[color_num], color_B_own[color_num] )
}
if gpr ( 101 ,67 , 58, 12 ) & color_num >= 0 { mode_pip = -mode_pip } // режим "пипетки"
if gpr ( 101 ,81 , 58, 12 ) { // автоматическое определение палитры цветов в анимации (16 цветов)
NUL_COLOR // сброс всех цветов в значение по умолчанию (серый)
p=0 l=0 r=0
n = (widh_wind*high_wind*frame_num) while n < (widh_wind*high_wind*anim_frames) {
if animat[n] != get_color ( color_R_own[l], color_G_own[l], color_B_own[l] ) {
m=0 while m<8 {
if animat[n] = get_color ( color_R_own[m], color_G_own[m], color_B_own[m] ) {p+1}
m+1}
if p < 1 { color_R_own[l] = get_red ( animat[n] ) color_G_own[l] = get_green ( animat[n] ) color_B_own[l] = get_blue ( animat[n] ) l+1 }
p=0
}
if tmp_layer[n] != get_color ( color_R_own[l], color_G_own[l], color_B_own[l] ) {
m=0 while m<16 {
if tmp_layer[n] = get_color ( color_R_own[m], color_G_own[m], color_B_own[m] ) {r+1}
m+1}
if r < 1 { color_R_own[l] = get_red ( tmp_layer[n] ) color_G_own[l] = get_green ( tmp_layer[n] ) color_B_own[l] = get_blue ( tmp_layer[n] ) l+1}
r=0
}
n+1
}
}
}
// закладка ----------КИСТЬ----------
if zakladka = 3 {
mode_pip= -1
}
// закладка ----------ФОН------------
if zakladka = 4 {
mode_pip= -1
if gpr(-159,-95,56,12) {LOAD_FON} // открыть файл Jpeg/Gif в качестве фонового изображения
// если показывается фоновое изображение, можно его переместить по кадру и изменить масштаб отображения
if wiev_fon_flag > 0 {
if gpr(-142,-34,12,12) { y_fon-4 } // выше
if gpr(-158,-26,12,12) { x_fon-4 } // левее
if gpr(-126,-26,12,12) { x_fon+4 } // правее
if gpr(-142,-18,12,12) { y_fon+4 } // ниже
if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_fon+8 } // увеличение высоты и ширины
if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_fon-8 } // уменьшение высоты и ширины
// уменьш./увелич. яркости фонового изображения
if gpr(104,4,10,12) { bright_fon_img-8
if bright_fon_img < 16 { bright_fon_img = 16 }
}
if gpr(139,4,10,12) { bright_fon_img+8
if bright_fon_img >256 { bright_fon_img = 256 }
}
}
// как отображать фоновое изображение
if gpr(105,-90,48,12) { wiev_fon_flag = -wiev_fon_flag } // отображать / не отображать
}
// закладка --------РИСОВАНИЕ--------
if zakladka = 5 {
mode_pip= -1
// очищаю кадр
if gpr(104,-90,52,12) {
n=0 while n<(widh_wind*high_wind) {
animat[((widh_wind*high_wind)*frame_num)+n] = color_alfa
tmp_layer[((widh_wind*high_wind)*frame_num)+n] = color_alfa
n+1
}
}
// выбор: карандаш или стерка
if gpr(-150,-60,40,65) & mode_br = 2 { color_brush = color_brush_tmp mode_br = 1 }
if gpr(-150,0,40,65) & mode_br = 1 { color_brush_tmp = color_brush color_brush = color_alfa mode_br = 2 }
// увелич/уменьш размера карандаша
if gpr(-147,-77,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
if gpr(-124,-77,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }
// увелич/уменьш размера стерки
if gpr(-147,71,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
if gpr(-124,71,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }
// вкл/выкл направляющие (фон для симметричного рисования)
if gpr(104,-47,44,12) { mode_fon = - mode_fon}
// если фон с направляющими включен, то можно его сделать светлее/темнее
if mode_fon = 1 {
if gpr(104,-31,10,12) { bright_fon = bright_fon-16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon )
if bright_fon < 16 { bright_fon = 16 }
}
if gpr(139,-31,10,12) { bright_fon = bright_fon+16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon )
if bright_fon >192 { bright_fon = 192 }
}
}
// выбор одного из четырех режимов симметричного рисования и режима без симметрии
if gpr(104,5,52,12) { mode_sym = 1 }
if gpr(104,21,52,12) { mode_sym = 2 }
if gpr(104,37,52,12) { mode_sym = 3 }
if gpr(104,53,52,12) { mode_sym = 4 }
if gpr(104,69,52,12) { mode_sym = 5 }
}
ret
//***********************ПОДПРОГРАММА ЗАПИСИ АНИМАЦИИ GIF*******************************
SAVE_ANIM:
save_flag = 0
video_export_hq(1) // режим качественного экспорта в GIF, при котором для каждого кадра будет создаваться своя локальная цветовая палитра
if widh_wind > 200 | high_wind > 200 { widh_wind = 200 high_wind = 200 }
x_wind = -widh_wind/2
y_wind = -high_wind/2
filename = " "
if (file_dialog( filename, "Сохранить анимацию Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
f = 0 while( f < anim_frames ) {
clear( SNEG )
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, f )
fpixi ( tmp_layer, 0, 0, 0, 0, f )
frame( 100 )
f + 1
}
} else {ret}
stop_video_export
ret
//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В ВИДЕО ФАЙЛ (все окно 320х240)**********************
EXPORT_AVI:
filename = " "
if (file_dialog( filename, "Сохранить рисование в AVI", "avi", "save_id" )) {
video_export_realtime (1) //Включение режима реального времени
video_export_fps (24) // стандартная частота кадров для видео
// !!! не все кодеки поддерживают запись с нестандартной частотой кадров !!!
// 12 к/с поддерживает кодек XVid
video_export_avi ( filename, -x_window/2, -y_window/2, x_window, y_window )
} else {save_flag = 0 ret}
save_flag = 0
status_export_avi = 1
stop_export_avi = 0
ret
//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В АНИМИРОВАННЫЙ GIF ФАЙЛ (поле рисования)**********************
EXPORT_GIF:
filename = " "
if (file_dialog( filename, "Сохранить рисование в GIF", "gif", "save_id" )) {
video_export_gif ( filename, x_wind+1, y_wind+1, widh_wind-1, high_wind-1 )
} else {save_flag = 0 ret}
save_flag = 0
status_export_gif = 1
stop_export_gif = 0
ret
//***********************ПОДПРОГРАММА ЗАПИСИ КАДРА GIF*******************************
SAVE_GIF:
save_flag = 0
video_export_hq(1) // режим качественного экспорта в GIF, при котором для каждого кадра будет создаваться своя локальная цветовая палитра
if widh_wind > 200 | high_wind > 200 { widh_wind = 200 high_wind = 200 }
x_wind = -widh_wind/2
y_wind = -high_wind/2
filename = " "
if (file_dialog( filename, "Сохранить кадр Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
clear( SNEG )
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
fpixi ( tmp_layer, 0, 0, 0, 0, frame_num )
frame( 100 )
} else {ret}
stop_video_export
ret
//***********************ПОДПРОГРАММА ЗАПИСИ КАРТИНКИ В ASCII-СИМВОЛАХ*******************************
SAVE_TXT:
save_flag = 0
if widh_wind > 200 | high_wind > 200 { widh_wind = 200 high_wind = 200 }
x_wind = -widh_wind/2
y_wind = -high_wind/2
filename = " "
if (file_dialog( filename, "Сохранить кадр TXT", "txt", "save_id" )) {
clear( SNEG )
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
fpixi ( tmp_layer, 0, 0, 0, 0, frame_num )
frame(0)
save_screen ( filename, x_wind, y_wind, widh_wind, high_wind )
} else {ret}
ret
//************************ПОДПРОГРАММА ЗАГРУЗКИ ФАЙЛА АНИМАЦИИ********************************
LOAD_ANIM:
filename =
" "
if (file_dialog( filename, "Открыть анимацию Gif", "gif", "load_id" ) ) {
remove_pixi (animat)
animat = load_pixi(filename) } else {ret}
tmp_layer = clone_pixi ( animat, 1 )
tmp_frame = clone_pixi (animat)
color_alfa = get_pixi_alpha (animat)
pixi_transp (animat,1,color_alfa)
widh_wind = get_pixi_xsize (animat)
widh_wind_t = widh_wind
high_wind = get_pixi_ysize (animat)
high_wind_t = high_wind
anim_frames = get_pixi_frames(animat)
anim_frames_t = anim_frames
x_wind = -widh_wind/2
y_wind = -high_wind/2
resize_pixi (tmp_layer,widh_wind,high_wind,0)
frame_num = 0
scale_tmp = 0
x_tmp = 0
y_tmp = 0
ret
//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА JPEG****************************
LOAD_JPEG:
filename =
" "
if (file_dialog( filename, "Открыть кадр JPEG", "jpg", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
set_screen ( animat , frame_num )
//fpixi (animat,x_tmp,y_tmp,0,scale_tmp,frame_num)
//set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,x_tmp,y_tmp,0,scale_tmp,1)
set_screen( 0 )
ret
//************************ПОДПРОГРАММА СКЛЕИВАНИЯ ВСЕХ СЛОЕВ С БЭКГРАУНДОМ****************************
ON_BACKGROUND:
/*
set_screen ( animat , frame_num )
fpixi (animat,x_tmp,y_tmp,0,scale_tmp,frame_num)
fpixi (tmp_layer,x_tmp,y_tmp,0,0,frame_num)
n=(widh_wind*high_wind*frame_num) while n<(widh_wind*high_wind)*(frame_num+1) {
tmp_layer[n] = color_alfa
n+1
}
set_screen( 0 )
*/
ret
//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА GIF****************************
LOAD_GIF:
filename =
" "
if (file_dialog( filename, "Открыть кадр GIF", "gif", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
set_screen ( animat , frame_num )
//fpixi (animat,x_tmp,y_tmp,0,scale_tmp,frame_num)
//set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,x_tmp,y_tmp,0,scale_tmp,1)
set_screen( 0 )
ret
//************************ПОДПРОГРАММА ЗАГРУЗКИ ФОНОВОГО ИЗОБРАЖЕНИЯ JPEG/GIF****************************
LOAD_FON:
filename =
" "
if (file_dialog( filename, "Открыть фон JPEG/GIF", "jpg/gif", "load_id" ) ) {
fon = load_pixi(filename) } else {ret}
x_fon = 0
y_fon = 0
scale_fon = 0
ret
//************************ПОДПРОГРАММА РИСОВАНИЯ*************************************
DRAWING:
// если выбрана своя палитра и включен режим пипетки и курсор в рабочей области, то "взять" данные о цвете
if gpr( -100, -100, 200, 200 ) & mode_pip > 0 & color_num >= 0 {
color_tmp = get_dot ( get_pen_x, get_pen_y )
color_R_own[color_num] = get_red (color_tmp)
color_G_own[color_num] = get_green (color_tmp)
color_B_own[color_num] = get_blue (color_tmp)
color_brush = get_color ( color_R_own[color_num], color_G_own[color_num], color_B_own[color_num] )
ret
} else { // иначе рисую или стераю
if wiev_fon_flag > 0 & wiev_fon = 2 { // отрисовываю фон
transp (bright_fon_img)
fpixi (fon,x_fon,y_fon,0,scale_fon,0)
transp (256)
// закрываю все, кроме рабочего поля
fbox(-x_window/2,-y_window/2,x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,y_window/2-(y_window/2-high_wind/2),x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
fbox(widh_wind/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
}
if gpr( -100, -100, 200, 200 ) {
if mode_sym = 1 {
box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}
if mode_sym = 2 {
box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}
if mode_sym = 3 {
box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
if mode_sym = 4 {
box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
if mode_sym = 5 {
box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )
box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
}
//set_screen ( animat , frame_num )
set_screen ( tmp_layer , frame_num )
//fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
if gpr( -100, -100, 200, 200 ) {
if mode_sym = 1 {
fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}
if mode_sym = 2 {
fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}
if mode_sym = 3 {
fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
if mode_sym = 4 {
fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
if mode_sym = 5 {
fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )
fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
}
set_screen( 0 )
set_screen ( animat , frame_num )
set_screen( 0 )
}
ret
//************************ПОДПРОГРАММА ОТРИСОВКИ ФОНА С НАПРАВЛЯЮЩИМИ ДЛЯ СИММЕТРИЧНОГО РИСОВАНИЯ*************************************
SYMM_FON:
if mode_fon = 1 {
if mode_sym = 1 {
transp (64)
fbox ( x_wind, y_wind, widh_wind, high_wind, color_fon)
transp (256)}
if mode_sym = 2 {
transp (64)
fbox ( 0, y_wind, widh_wind/2, high_wind, color_fon)
transp (256)}
if mode_sym = 3 {
transp (64)
fbox ( x_wind, 0, widh_wind, high_wind/2, color_fon)
transp (256)}
if mode_sym = 4 {
transp (64)
fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon)
fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
transp (256)}
if mode_sym = 5 {
transp (64)
fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon)
fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
transp (256)}
}
ret
//************************ПОДПРОГРАММА ПРОИГРЫВАНИЯ АНИМАЦИИ*************************************
PLAY_ANIMAT:
if play_anim = 1 & loop = -1 {
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
pixi (scr_mask,0,0,0,0)
TIMELINE
frame(frame_time)
frame_num + 1
if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }
}
if play_anim = -1 & loop = -1 {
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
pixi (scr_mask,0,0,0,0)
TIMELINE
frame(frame_time)
frame_num - 1
if frame_num < 0 { frame_num = 0 }
}
if play_anim = 1 & loop = 1 {
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
pixi (scr_mask,0,0,0,0)
TIMELINE
frame(frame_time)
frame_num + 1
if frame_num > (anim_frames-1) { frame_num = 0 }
}
if play_anim = -1 & loop = 1 {
fpixi ( animat, x_tmp, y_tmp, 0, scale_tmp, frame_num )
pixi (scr_mask,0,0,0,0)
TIMELINE
frame(frame_time)
frame_num - 1
if frame_num < 0 { frame_num = anim_frames }
}
ret
SCREENSHOT_MASK: // делаю копию экрана
scr_0 = 0
n=0 while n<(320*240) {scr_mask[n]=scr_0[n] n+1}
ret
// подпрограмма маскировки рабочего пространства
MASK_WORKSPACE:
fbox(-160,-120,320,20,WHITE)
fbox(-160,100,320,60,WHITE)
fbox(-160,-120,60,240,WHITE)
fbox(100,-120,60,240,WHITE)
ret
INFO_ABOUT:
clear (BLACK)
n=5 while n<14 {
fbox ( -(30*n)/2, -(24*n)/2, 30*n, 22*n, WHITE )
effector( SNEG, 256, 0, -50, -60, 54*2, 50*2, 1 )
effector( BLUE, 256, 0, -50, -60, 54*2, 50*2, 1 )
pixi ( logo_CGF, 0, -10, 2, 0, 1)
t_scale (400,400,400)
print ( "
CreaGraFix
", -40, 20, BLACK )
print ( ver, -16, 44, BLACK )
t_reset
print ("© Al_Rado GNU GPL 2.0 ",-150,100, BLACK)
print (date,90,100, BLACK)
frame ( 300 )
n+1
}
frame ( 4000 )
clear (WHITE)
info = 0
ret
// три массива значений для палитры из 16 цветов (свои). Значения по умолчанию.
NUL_COLOR:
color_R_own = new_array(16)
color_G_own = new_array(16)
color_B_own = new_array(16)
n=0 while n<16 {
color_R_own[n] = 192 color_G_own[n] = 192 color_B_own[n] = 192
n+1
}
ret
//************************ПОДПРОГРАММА СОЗДАНИЯ ЛОГО*************************************
MAKE_LOGOS:
b=#FFFFFF
logo_CGF="
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbb
bbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb
bbbbbbbbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbb..bbbbbbbbbbbbbbbbbbbbb..bbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb..bbbb..bbbbbbbbbbbbbbbbbbb..bbbb..bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbbb..bbbbbbbbbbbbb..bbbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bb...bbbbb.bbbbbbbbb.bbbbb...bb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb..b.b..bbbb..bbbbbbb..bbbb..b.b..bbbbbbbbbbbbb
bbbbbbbbbbbbbbb.b..b.bbbbb.bbbbbbb.bbbbb.b..b.bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb..bbbb.bbbb.bbbbbbb.bbbb.bbbb..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbbb.bbbb..bbb...bbb...bbb..bbbb.bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbb..bbb.bbbb..bbb..bbbb.bbb..bbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb.bbb..bbb.......bbb..bbb.bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbb.bbb.bbbbbbbbbbbbb.bbb.bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbb..b.bbbbbbbbbbbbb.b..bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.b.b.bbbbbbbbb.b.b.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.bbb.bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb...bbbbbbb..b..bbbbbbb...bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb....bbb..bbbbbb.bbbbbb..bbb....bbbbbbbbbbbbbb
bbbbbbbbbbbb...b.b...b.b.bbbb.b.bbbb.b.b...b.b...bbbbbbbbbbb
bbbbbbbbb...bb..b.bbbb.bbb.bb.b.bb.bbb.bbbb.b..bb...bbbbbbbb
bbbbbbbb..b...bbbbbbbb..bb..b.b.b..bb..bbbbbbbb...b..bbbbbbb
bbbbbb.b...bb.bbbbbbbbb.....bbbbb.....bbbbbbbbb.bb...b.bbbbb
bbbb...b.bbbb.bbbbbbbbbb.bb..bbb..bb.bbbbbbbbbb.bbbb.b...bbb
bbbb.....b.b.b.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b.b.b.....bbb
bbbbb..bb...b.b..bbbbbbbbbbbbbbbbbbbbbbbbbbb..b.b...bb..bbbb
bbbbbbbbbbbb.......bbbbbbbbbbbbbbbbbbbbbbb.......bbbbbbbbbbb
bbbbbbbbbbbbbb...b.bbbbbbbbbbbbbbbbbbbbbbb.b...bbbbbbbbbbbbb
bbbbbbbbbbbbbbb..b.b.bbbbbbbb...bbbbbbbb.b.b..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb......bbbbbb...b...bbbbbb......bbbbbbbbbbbbbb
bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbb.b....bbbbbbbbbbb....b.bbb...bbbbbbbbbbbb
bbbbbbbbbbbb..b..b..bb...bbbbbbbbbbb...bb..b..b..bbbbbbbbbbb
bbbbbbbbbbbb....bbb.bbbbbbbbbbbbbbbbbbbbb.bbb....bbbbbbbbbbb
bbbbbbbbbbbb..bb.bbbbb..bbbbbbbbbbbbb..bbbbb.bb..bbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.....bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbbbb..b..bbbbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.bb..b..bbb..b..bb.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.......bbbbb.......bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
"
make_pixi(logo_CGF)
A=#191919 B=#191919 C=#1E1E1E D=#212121 E=#232323 F=#313131 G=#3A3A3A H=#3A3A3A I=#3A3A3A J=#3E3E3E K=#414141 L=#454545 M=#4A4A4A
N=#4A4A4A O=#4E4E4E P=#515151 Q=#585858 R=#5A5A5A S=#5A5A5A T=#656565 U=#6A6A6A V=#6B6B6B W=#747474 X=#7B7B7B Y=#7B7B7B Z=#848484
a=#858585 b=#8C8C8C c=#8C8C8C d=#939393 e=#949494 f=#949494 g=#9E9E9E h=#A5A5A5 i=#A6A6A6 j=#ADADAD k=#ADADAD l=#B0B0B0 m=#B5B5B5
n=#B5B5B5 o=#B9B9B9 p=#C5C5C5 q=#C5C5C5 r=#D1D1D1 s=#DDDDDD t=#DEDEDE u=#EFEFEF v=#EEEEEE w=#FAFAFA x=#FFFFFF y=#FFFFFF z=#FFFFFF
karand="
.......PT.......
.......BB.......
......nBBq......
......FFEK......
.....gTPNVk.....
.....HTWWZH.....
....ZnHcgNhc....
...uNrSckKwKw...
...VrggckWqqW...
..rSyStcknZySt..
..PtyHyckvNytS..
.qVyrVyckyKwyVo.
.BwyckyckyWqywD.
ZgyyPvyZkykZyyhZ
NfytKyyZkywBywgP
ZFSSFyyDYyrDWWNc
ZBBEPHSkETFqhnkc
ZBDHNPPYfYkqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukw
yDBBBDEFHKNNPSNv
yHBDEHKNSTVWZcHy
cBDHNSVYfhnqtuhc
wBDHNSVYfhnqtukc
rEBDFHNPTVWZcgWy
ywccccccccccccqy
"
make_pixi(karand)
ret