fab by Positivity [web]
____ __ | __'____| |__ florian & alain's blender | _| _ | _ | 2009 januar-november '_' '___._'_____' usage: fab function function_parameters !!! s'arranger pour que les palettes soient du texte plutôt !!! Nouveau: between !!! Donc ne pas mettre de between dans landscape, il sera rajouté après !!! Le emboss dans mk_Txtr2.asm=MkTxtr2G est !!! ldrB r14,[r3],#1 ; r14=pixie up. !!! ldrB r6,[r4],#1 ; r6=pixie down. !!! and r14,r14,#&3f !!! and r6,r6,#&1f !!! sub r6,r6,r14,lsr #1 ; r6=delta. !!! addS r6,r6,#middle ; Add the middle constant. list of functions ~~~~~~~~~~~~~~~~~ bmp2rgb in.bmp red.g green.g blue.g // in.bmp peut être 1bpp, 4bpp, 8bpp ou 24bpp rgb2bmp red.g green.g blue.g out.bmp // si le nb total de couleurs est <256 créer une image 8bpp ou moins rgb2grey red.g green.g blue.g grey.g // grey:=(red+green+blue)/3 negative in.g out.g // BEWARE, pixel:=65535-pixel, maybe rsbI 255 is what you want rotate90 in.g out.g // anticlockwise rotate180 in.g out.g rotate270 in.g out.g hmirror in.g out.g // image upside down vmirror in.g out.g add in1.g in2.g out.g // arithmetical & logical operators between two images sub in1.g in2.g out.g mul in1.g in2.g out.g div in1.g in2.g out.g // in1.g divided by in2.g*/ and in1.g in2.g out.g or in1.g in2.g out.g xor in1.g in2.g out.g addI value in.g out.g // arithmetical & logical operators between image and value subI in.g value out.g rsbI value in.g out.g // rsb=reverse substract mulI factor in.g out.g divI in.g divisor out.g andI value in.g out.g orI value in.g out.g xorI value in.g out.g addborders left right bottom top color in.g out.g removeborders left right bottom top in.g out.g disc x y r color in.g out.g // well rectangle top bottom left right color in.g out.g rectangle2 top left length height color in.g out.g // if you set ClearColor to 0, then you'll have circles inside circles fillwithOs OutRMin OutRMax InRMmin InRMmax Border ClearColor CircleColor in.g out.g edge size emptycol edgecol in.g out.g // creates an edge around non empty pixels explode nbpoints in.g out.g // moves randomly nbpoints points pal2rgb in.pal in.g red.g green.g blue.g // assign pixels to a color palette setmincol mincol in.g out.g // if col<colmin then col=colmin setmaxcol maxcol in.g out.g // if col>colmax then col=colmax between colmin colmax in.g out.g // if col<colmin then col=colmin, etc range colmin colmax in.g out.g // = equalise? subsample xratio yratio in.g out.g floyd nb_colors in.g out.g (reduce colors using Floyd-Steinberg algorithm) floyd palette.pal red.g green.g blue.g out.g // <65536 couleurs x 7 3 5 1 * There are many ways to find the nearest palette color with varying levels of efficiency and quality. A trivial algorithm is to search the color with minimum straight line distance in the color cube from the given color. * We can alternate between left-to-right and right-to-left (also reflect the diffusion matrix), this avoids some kind of artifacts. mknoise colormin colormax width height out.g // creates an image filled with noise mkstrippedtube diameter nbsteps nbstripes col0 col1 out.g grey2bitplanes nbbitplanes in.g out.xxx // bitplanes in ST mixed format ??? Faire aussi rgb2bitplanes ??? !!!!landscape nbiterations 0 0 in.g out.g !!!! factor et absorption ne sont pas implémentés landscape nbiterations fractalfactor*100 absorption*100 in.g out.g // Pour le filtre si la valeur sort de [0;255] on la met à 0 ou 255 // (a b c) filter a b c d e f g h i n offset in.g out.g // convolution filter (d e f) :n + offset // (g h i) rem smooth1: fab filter 0 1 0 1 1 1 0 1 0 5 0 in.g out.g rem smooth2: fab filter 1 2 1 2 4 2 1 2 1 16 0 in.g out.g rem unsmooth: fab filter -1 1 -1 1 1 1 -1 1 -1 1 0 in.g out.g rem relief1: fab filter -2 -1 0 -1 0 1 0 1 2 1 128 in.g out.g rem relief2: fab filter -1 1 -1 1 0 1 -1 1 -1 1 128 in.g out.g rem relief3: fab filter 0 -1 0 -1 2 0 0 0 0 1 128 in.g out.g rem strange1: fab filter 1 0 1 0 -1 0 1 0 1 3 0 in.g out.g rem strange2: fab filter 0 1 0 1 -1 1 0 1 0 3 0 in.g out.g rem sharpness: fab filter 0 -n 0 -n 4n+1 -n 0 -n 0 1 0 in.g out.g rem sharpness2: fab filter -n -n -n -n 8n+1 -n -n -n -n 1 0 in.g out.g rem edge=laplace: fab filter -1 -1 -1 -1 8 -1 -1 -1 -1 1 0 in.g out.g rem laplace2: fab filter 0 -1 0 -1 4 -1 0 -1 0 1 0 in.g out.g rem edge2: fab filter -1 -1 -1 0 0 0 1 1 1 1 0 in.g out.g rem edge3: fab filter -5 0 0 0 0 0 0 0 5 1 0 in.g out.g rem emboss: fab filter 0 0 0 0 -1 0 0 0 1 1 0 in.g out.g rem emboss2: fab filter 2 0 0 0 -1 0 0 0 -1 1 0 in.g out.g rem repoussage: fab filter -2 -1 0 -1 1 1 0 1 2 1 0 in.g out.g NOT YET IMPLEMENTED ~~~~~~~~~~~~~~~~~~~ darkest lightest mask in1.g in2.g out.g modulo in1.g in2.g out.g moduloI in.g divisor out.g resize [w=... | h=... | x...] in.g out.g resample [w=... | h=... | x...] in.g out.g (bilinear/biquadratic/bicubic... resampling) stretch (0;126;127 deviendra 0;~253;255) tile (peut être émulé avec addborders+or) nearest nb_colors in.g out.g (reduce colors using nearest neighbour) couleur_majoritaire gradient circular_gradient mkpalette nbcolors red.g green.g blue.g out.pal ordereddithering .... ...# ...# .#.# .#.# .#.# .#.# .#.# .#.# .### .### #### #### #### #### #### #### .... .... .... .... .... ..#. ..#. #.#. #.#. #.#. #.#. #.#. #.#. #.## #.## #### #### .... .... .#.. .#.. .#.# .#.# .#.# .#.# .#.# .#.# ##.# ##.# #### #### #### #### #### .... .... .... .... .... .... #... #... #.#. #.#. #.#. #.#. #.#. #.#. ###. ###. #### >>> fonctions avec wrap <<< fractal_landscape (ou bien fractal expansion) (+wrap) ntsc (fred) voronoi * Pour les valeurs les demander en hexa $01 ou &01... avec un char qui ne peut pas être dans un nom de fichier? On peut éviter d'avoir recours à une valeur en créant (random) une image .g avec la dite valeur, mais c'est pas très propre... * Pour certaines fonctions (and, or, add...) lorsqu'une des images est plus grande que l'autre, faire l'opération sur la partie commune (de taille min(w0;w1)*min(h0;h1) et qui part du bottom left). * utiliser une clé usb en guise de ramdisk? * on pourrait tout faire avec des .g en 16 bits (ainsi rgb2grey serait emulé) * faire les fonctions en wrap par défaut. Si l'utilisateur n'en veut pas il utilisera un addborders+removeborders
[ back to the prod ]