Ферма - техническое название
| |
demoscene | Дата: Пятница, 11 Июля 2025, 15:05 | Сообщение # 21 |
частый гость
Сейчас нет на сайте
| Цитата где найти простой и удобный видеообменник? https://iimg.su/ берёт гифки.
Код ffmpeg -loop 0 -i video.mp4 -lavfi "palettegen=reserve_transparent=1[pal],[0:v][pal]paletteuse=dither=bayer" video.gif
|
|
| |
vvs81 | Дата: Пятница, 11 Июля 2025, 15:33 | Сообщение # 22 |
был не раз
Сейчас нет на сайте
| Это не то, обменник картинок, гиф это не видео файл
|
|
| |
demoscene | Дата: Пятница, 11 Июля 2025, 16:25 | Сообщение # 23 |
частый гость
Сейчас нет на сайте
| vvs81, тогда лей сюда cloud.mail.ru они даже дают посмотреть из браузера, если не ошибаюсь.
|
|
| |
vvs81 | Дата: Пятница, 11 Июля 2025, 17:04 | Сообщение # 24 |
был не раз
Сейчас нет на сайте
| Видос тест. Ну вроде работает, думал что есть такие которые делают превьюшку, да хрен с ним, и так сойдёт. Спасибо.
Сообщение отредактировал vvs81 - Пятница, 11 Июля 2025, 19:53 |
|
| |
demoscene | Дата: Пятница, 11 Июля 2025, 17:42 | Сообщение # 25 |
частый гость
Сейчас нет на сайте
| Заценил видос. Нармуль анимация. А я вот этим занимался.


 Я это сделал автоматом. Шаг 1.
Код import os,sys,cv2 as cv,numpy as np from PIL import Image p=sys.argv[1] a=set() for fn in os.listdir(p): im=np.uint8(Image.open(p+'/'+fn).convert('RGBA')) im=im.reshape(-1,4) im=im[:,2::-1][im[:,3]>254] im>>=2 a.update(set([tuple(np.uint16(c)) for c in im.reshape(-1,3)])) a=list(a) a.sort() a=np.uint8(a) a.tofile(p+'.spc') Шаг 2.
Код #include <stdio.h> unsigned char buf[0x6000000]; unsigned char field[0x1000000]; int main(int argc,char**argv){ FILE*f; unsigned char*a; unsigned char*b; unsigned char*c; int i; int j; int k; int t; int cnt; int cnt_sav; int pass=0; int done=0; if(argc!=2)return 1; f=fopen(argv[1],"rb"); if(!f)return 2; cnt=fread(buf,3,0x1000000,f); fclose(f); if(cnt<0)return 3; a=buf; for(i=0;i<cnt;++i){ field[a[0]|(a[1]<<8)|(a[2]<<16)]=1; a+=3; } i=0; k=0; a=buf; c=buf+(cnt*3); while(!done){ done=1; cnt_sav=cnt; for(;i<cnt_sav;++i){ if(!(i&4095))printf("%d %d\n",pass,i); b=buf+(k*3); for(j=k;j<i;++j){ c[0]=(a[0]+b[0])>>1; c[1]=(a[1]+b[1])>>1; c[2]=(a[2]+b[2])>>1; t=c[0]|(c[1]<<8)|(c[2]<<16); if(!field[t]){ field[t]=1; ++cnt; c+=3; done=0; } b+=3; } a+=3; } k=i; ++pass; } f=fopen(argv[1],"wb"); if(!f)return 4; fwrite(buf,3,cnt,f); fclose(f); return 0; } Шаг 3.
Код import os,sys,cv2 as cv,numpy as np,random from PIL import Image def load_sprites(d,norm=0): a=[] for fn in os.listdir(d): im=np.uint8(Image.open(d+'/'+fn).convert('RGBA')) col=im[:,:,2::-1] if norm: col=col-col.min((0,1)) col=np.uint8(col*(255.9/col.max((0,1)))) im=np.dstack([col,im[:,:,3]]) a.append(im) return a def load_space(fn): ret=np.fromfile(fn,dtype=np.uint8).reshape(-1,3) ret<<=2 ret|=ret>>6 return ret asis=load_sprites('as_is') wood=load_sprites('wood',1) woodtex=load_space('wood_tex.spc') surface=np.zeros_like(asis[0][:,:,:3]) def project(im,trans=None): global surface mask=im[:,:,3]>254 data=im[:,:,:3][mask] if trans is not None: trans=np.int32(trans[:2]) v0=np.square(trans[0]).sum() v1=np.square(trans[1]).sum() if v0>v1: trans=trans[::-1] rng=np.float32(trans[1]-trans[0])*(1./255) data=np.uint8(data*rng) data+=np.uint8(trans[0]) surface[mask]=data for im in asis: project(im) for im in wood: c0=random.choice(woodtex) c1=random.choice(woodtex) while c0[0]>c1[0] or c0[1]>c1[1] or c0[2]>c1[2]: c0=random.choice(woodtex) c1=random.choice(woodtex) project(im,(c0,c1)) cv.imwrite('out.png',surface) Тут всё. https://cloud.mail.ru/public/bUsB/o2rpZ3kTr
Сообщение отредактировал demoscene - Пятница, 11 Июля 2025, 18:09 |
|
| |
vvs81 | Дата: Пятница, 11 Июля 2025, 18:09 | Сообщение # 26 |
был не раз
Сейчас нет на сайте
| Заменой цветов Добавлено (11 Июля 2025, 18:11) --------------------------------------------- очень интересная и полезная утилита, вот только пока не могу придумать куда её применить
|
|
| |
demoscene | Дата: Пятница, 11 Июля 2025, 18:26 | Сообщение # 27 |
частый гость
Сейчас нет на сайте
| Это можно встроить в игру, если у тебя нормальный движок. И сделать много-премного случайных локаций, почти не занимающих места. Вот это
значит, что расчёт в 6 бит на канал. Замени на
для точности 5 бит на канал. Это может помочь уменьшить размер игры, если это критично.
Сообщение отредактировал demoscene - Пятница, 11 Июля 2025, 18:30 |
|
| |
vvs81 | Дата: Пятница, 11 Июля 2025, 18:45 | Сообщение # 28 |
был не раз
Сейчас нет на сайте
| demoscene, я не на STMe или Ардуино делаю игру, мне нет необходимости экономить место, спасибо.
|
|
| |
demoscene | Дата: Пятница, 11 Июля 2025, 18:48 | Сообщение # 29 |
частый гость
Сейчас нет на сайте
| Я слышал, браузеркам дают максимум 50 мегов на бесплатных хостингах. Или у тебя VPS? Вроде бы я тут сделал всё, что хотел. Пока, или есть ещё вопросы?
|
|
| |
vvs81 | Дата: Пятница, 11 Июля 2025, 18:55 | Сообщение # 30 |
был не раз
Сейчас нет на сайте
| Ну если брать все мои файлы графики, то в 50 не поместиться так и так. Бесплатный хостинг мне не понадобится. Спасибо ещё раз. demoscene,
|
|
| |
|