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



Это гиф!
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

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

Комментарии (2)


  1. VT100
    28.05.2025 17:59

    ЕМНИП, в правилах или рекомендациях записано, что такие объёмы трафика надо прятать под кат.


  1. Dennvo
    28.05.2025 17:59

    Невероятно красиво. Как буд-то съел мухомор =)