WIP: CreaGraFix

Pixilang по русски
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: CreaGraFix v.004

Post by Al_Rado » Thu Jul 10, 2008 10:45 am

Выкладываю свежий релиз.

Новые функции и изменения 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

Продублировал тут http://slil.ru/25968911
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Wed Jul 16, 2008 8:10 pm

вот
уже можно начинать использовать
если рассматривать только закладку анимация то
баги
- падает (linux) при попытке выйти на кадр раньше если кадр только 1
- оверлеиит и падает при переходе на вновьсозданный фрейм

фичи
- луп нужно постоянно врубить - опыт показывает
- при создание фрейма (кнопка +) нужно автоматом переходить на вновь созданный фрейм иначе путаница
- кнопки плей стоп перейти пока не юзабельны напрочь надо лиюо сократить их либо квадратиками обозначать чтоли

вот

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Wed Jul 16, 2008 8:36 pm

G=#877C7C
K=#BFA9A9
E=#690F0F
b=#000
img="
.......b
......bKb
.....bKKKb
....bKKKbGb
...bKKKbGGGb
..bKKKbGGGb
.bKKKbGGGb
bKKKbGGGb
bKKbGGGb
bbbGGGb
bbbGGb
Ebbbb
"

вот карандашик постильнее может понравиться

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Wed Jul 16, 2008 10:33 pm

Значит кто-то уже юзает ) Спасибо, Goglus

Начну от обратного.
Иконка проработанная, но пока совсем не вписывается в интерфейс. По задумке: когда рисуешь - выделен карандаш, когда стираешь - область стёрки.
По багам на Линуксе - ничего пока не могу проверить к сожалению... К след. релизу думаю протестирую.
А вот в этом обновлении луп по-умолчанию включен )
Переход на вновь созданный кадр действительно удобнее. Сделаю, не проблема.
Вот по полоске управления - переделывать буду пожалуй вместе с гуи, где-то с 01 версии. А пока функциональное наполнение важней... Может есть уже хороший пример полоски навигации/таймлайна? Тогда можно идейку и позаимствовать )
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Thu Jul 17, 2008 8:15 pm

юзаю конечно, Pixilang придумывался чтоб аниматор написать)
к интерфейсу надеюсь приложить еще руку

вот глянь может пригодится http://slil.ru/25988214

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Thu Jul 17, 2008 8:57 pm

Во прикольно... Этого творения я не видел :)
Наработки для Pixi-аниматора? Интересна реализация функции Undo... В остальном тож поковыряюсь :wink:
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Sun Jul 20, 2008 1:19 am

я его юзаю на покете и даже сделал 2 урезанных форка
если бы доделать таймлинию чтоб не прыгала и кнопку "добавить фрейм" внутри - был бы готовый продукт
но у меня мозг маловат

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Mon Jul 21, 2008 11:47 am

Иногда проще написать самому, чем переделать )
В этом редакторе многое реализовано совсем на других принципах в сравнении с CGF.
Рисование с зумом красиво реализовано, но рисовать ничем кроме точки не выйдет без основательной переделки...
По идее добавить кадр можно так же как и у меня, но на практике разобраться в коде без комментов проблематично... всем кроме автора :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Mon Jul 21, 2008 4:33 pm

ну тогда идею - кадрики это удобно и наглядно

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Fri Jul 25, 2008 9:44 am

В общем, набрел на отличную программку - ProMotion. Графический редактор-аниматор специализируется именно на пиксельной графике. Проекту более 10 лет и он в кругу профессионалов считается одним из лучших (кстати, весит всего 5 метров). И как это я раньше на него не обратил внимание ))
К чему это я... Вот где можно почерпнуть идеи интерфейса таймлайна да и вообще, инструменты )
Сразу обратил внимание, что в нем есть режим рисования точками - один в один как рисование в редакторах на Pixi )
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Fri Jul 25, 2008 9:22 pm

Симметричное рисование в ProMotion просто сказка, пытаюсь понять алгоритм отрисовки... Задается количество точек и всё... Удивительно :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Mon Jul 28, 2008 11:41 am

а ссылку?

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Mon Jul 28, 2008 2:03 pm

Триальная версия с оф. сайта http://www.cosmigo.com/promotion/pmft60.exe
Официальный мануал (Eng) http://www.cosmigo.com/promotion/pmmanual.exe

Несколько видео туторов:
http://www.wayofthepixel.net/pixelation ... mockup.avi
http://www.wayofthepixel.net/pixelation ... egaowl.avi
http://www.wayofthepixel.net/pixelation ... _ruins.avi
http://www.wayofthepixel.net/pixelation ... expoop.avi

Рисуют правда местами странно )) Но понять интерфейс чуть проще )
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus » Tue Jul 29, 2008 12:04 am

прикольно, хотя из видео я не понял как там с анимацией
в принципе обычный редактор + фича с клон растр объектами - непонятно что там со слоями
жалко что платная да еще и только винда

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado » Tue Jul 29, 2008 8:38 am

Слои присутствуют, но принцип их работы отличается от общепринятого )) Да и в панели инструментов, чтобы добраться до дополнительных тулзов нужен двойной клик )
Ищу хоть какую-то инфу на русском - похоже, что большинство продвинутых пиксельных художников предпочитают Фотошоп (
Вот мануальчик по рисованию 1-битной графики (персонажка) в ProMotion http://www.zx.pk.ru/attachment.php?atta ... 1132903762 by Surfin Bird.
Как раз анимация - сильная сторона этого пакета. Впрочем как и создание тайловых текстур (уровней игр и т.п.), и много чего ещё ) Одним словом, он "заточен" как раз на это: редактирование растровой графики, лого, спрайтов, тайлов, аватарок, иконок и создание анимации... Немного разобраться с интерфейсом и вперед!
Хотя в наше время, эти два минуса - платность и НЕ кроссплатформенность, сильно тормозят её популяризацию.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

Post Reply