Мандельброта с анимации gif и сделанные fasm, Delphi, ffmpeg

от автора

У нас есть много программ для рисования множество Мандельброта. Но сделать гиф с анимации — такового нет. Значит сделаем! )

Это гиф!
https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Color_Cycling_Animation_600px_3.gif
600 × 600 пкс, размер файла: 58,54 МБ, MIME-тип: image/gif, закольцованный

Но сначала нужно один статичный файл множество Мандельброта. Какой? 600 × 600? Не совсем. 600 на 8 — 4800! Потому что 256 цветов с 4800 × 4800 мы переведем 16121856 цветов с 600 × 600.

Сделали статичный 4800 × 4800? Хорошо. Мы начинаем )

Первый этап. Нужно сделать анимацию. Я делаю flat assembler
flatassembler.net/download.php
Tomasz Grysztar
Нужно asm

format PE GUI 4.0 include '..\include\win32a.inc'  invoke      CreateFile,fnam,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 mov         [hfna],eax invoke      ReadFile,[hfna],buf,600*8*600*8+1078,hows,0 invoke      CloseHandle,[hfna]  zikl: mov         esi,pale mov         edi,esi lodsd        mov         ecx,254 repe        movsd stosd  mov         eax,[coun] mov         ebx,10 mov         esi,coun-6 decod:       xor         edx,edx div         ebx add         dl,'0' mov         [esi],dl dec         esi cmp         eax,0 jne         decod  invoke      CreateFile,gnam,GENERIC_WRITE,0,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0 mov         [hgna],eax invoke      WriteFile,[hgna],buf,600*8*600*8+1078,hows,0 invoke      CloseHandle,[hgna] inc         [coun] cmp         [coun],255 jb          zikl  invoke      ExitProcess,0  data import   library kernel,'KERNEL32.DLL'   import kernel,\          CreateFile,'CreateFileA',\          ReadFile,'ReadFile',\          WriteFile,'WriteFile',\          CloseHandle,'CloseHandle',\          ExitProcess,'ExitProcess' end data  fnam        db      'params6.bmp',0 gnam        db      'pal000.bmp',0 coun        dd      0 align 1024 buf         rb      54 pale        rd      256             rb      600*8*600*8 hfna        rd      1 hgna        rd      1 hows        rd      1 

Имеется ввиду params6.bmp — один статичный файл множество Мандельброта. Получилось много-много файлов начиная с pal000.bmp заканчивая pal254.bmp. 256 цветов. 4800 на 4800 пиксели. Анимация через палитру! Только цветами!

https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Color_Cycling_Animation_600px.gif

Второй этап.
Теперь надо уменьшить 4800 на 4800 в 8 раз — 600 на 600 и увеличить 256 цветов в 16121856. Потому что 256 * 256 * 256 равно 16121856.
Чем? Конечно Delphi )
Embarcadero Delphi for Win32 compiler version 36.0
Нужно только ЧЕТЫРЕ ФАЙЛА!

DCC32.EXE
rlink32.dll
SysInit.dcu
System.dcu

Здесь видно 256 цветов на картинке слева и 16121856 цветов справа.

Нужно pas

{$APPTYPE CONSOLE} var fnam:string;     f,g:file;     b:array[0..12]of longint=(19778,0,54,40,0,0,$180001,0,0,2834,2834,0,0);     p:array[0..255]of array[0..3]of byte;     s:array[0..4915190]of byte;     c:array[0..2]of longint;     r:array[0..76790]of array[0..2]of byte;     x,y,m,n:longint;  begin   fnam:=paramstr(1);   assign(f,fnam);   reset(f,1);   delete(fnam,pos('.',fnam),4);   assign(g,fnam+'-AA8x8.bmp');   rewrite(g,1);   blockwrite(g,b,2);   seek(f,18);   blockread(f,b[4],8);   b[4]:=b[4] shr 3;   b[5]:=b[5] shr 3;   b[8]:=b[4]*b[5]*3;   b[0]:=b[8]+54;   blockwrite(g,b,52);   seek(f,54);   blockread(f,p,1024);   for y:=b[5]-1 downto 0 do   begin     blockread(f,s,b[4] shl 6);     for x:=0 to b[4]-1 do for n:=0 to 2 do     begin       c[n]:=0;       for m:=0 to 63 do c[n]:=c[n]+p[s[x shl 3+(m shr 3)*b[4] shl 3+m and 7]][n];       r[x][n]:=c[n] shr 6     end;     blockwrite(g,r,b[4]*3);     write(y:30,chr(13))   end;   close(f);   close(g) end. 

Получится SplAA8x8.exe
И нужно каждый файл SplAA8x8.exe проделать с pal000.bmp чтобы получилось pal000-AA8x8.bmp, pal001.bmp чтобы получилось pal001-AA8x8.bmp и так далее до pal254-AA8x8.bmp.

Если это долго то можете взять
disk.yandex.ru/d/X1k5M9nrEWYHVQ
он делает cmd
SplAA8x8.exe pal000.bmp
SplAA8x8.exe pal001.bmp
и так далее до
SplAA8x8.exe pal254.bmp
Это Notepad++

https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Color_Cycling_Animation_600px_2.gif

Третий этап.
Это последнее. ffmpeg. Нужно ffmpeg.org/download.html то есть www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z
Мы делаем gif!!!

ffmpeg -i pal%%3d-AA8x8.bmp «Mandelbrot Set Color Cycling Animation 600px 3.gif»

Все с pal000-AA8x8.bmp до pal254-AA8x8.bmp получается gif. Готово!
Как вы видите эти файлы в commons.wikimedia.org имеется многих категориях:

Color cycling fractals
Mandelbrot set animations
Animated GIF files between 50 MP and 100 MP
Fractal art
Near-copies of the Mandelbrot set within itself
Animated GIF files
Seamless animations
Misiurewicz point

и даже статьи!

ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%9C%D0%B0%D0%BD%D0%B4%D0%B5%D0%BB%D1%8C%D0%B1%D1%80%D0%BE%D1%82%D0%B0
fa.wikipedia.org/wiki/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87_%D9%85%D9%86%D8%AF%D9%84%D8%A8%D8%B1%D9%88
hy.wikipedia.org/wiki/%D5%96%D6%80%D5%A1%D5%AF%D5%BF%D5%A1%D5%AC
uk.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B6%D0%B8%D0%BD%D0%B0_%D0%9C%D0%B0%D0%BD%D0%B4%D0%B5%D0%BB%D1%8C%D0%B1%D1%80%D0%BE%D1%82%D0%B0

Два года назад я перенес инсульт. Нога и рука двигаются мало. Первая группы инвалидности. Купить продукты помогает соцработник. Но я могу писать статьи на Хабр!


ссылка на оригинал статьи https://habr.com/ru/articles/913344/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *