1(* 2 Copyright 2006,2010 by Mark Weyer 3 Maintenance modifications 2011 by the cuyo developers 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18*) 19 20open Farbe 21 22type punkt = float * float 23 24type bildchen = int * int * (punkt -> farbe) 25 (* Die ints sind Breite und H�he in Elementarquadraten *) 26 27val monochrom: farbe -> int -> int -> bildchen 28val spiegel_x: bildchen -> bildchen 29val kombiniere_bildchen: int -> int -> (int * int * bildchen) list -> bildchen 30 (* Breite, H�he, zu kombinierende Bildchen mit Positionen *) 31val ueberlagerung: bildchen -> bildchen -> bildchen option -> bildchen 32 (* ueberlagerung unten oben maske 33 malt oben �ber unten. 34 Dabei wird die Transparenz von oben aus dem durchsichtig-Kanal von 35 maske genommen. Ist maske None, so stattdessen aus dem von oben. 36 Breite und H�he des Ergebnisses sind die von unten. *) 37 38 39 40type pixelbild = int * int * farbe array array 41 (* Die kleinen array sind Zeilen. 42 Ein pixelbild hat den Ursprung links oben, ein bildchen links unten! *) 43 44val berechne: int -> bildchen -> pixelbild 45val abstrahiere : int -> pixelbild -> bildchen 46 (* Der int ist die Anzahl an Pixeln pro Elementarquadrat. *) 47 48val ausschnitt : int -> int -> int -> int -> pixelbild -> pixelbild 49 (* Die ints sind x0,y0,x1,y1. Der Ausschnitt ist von (x0,y0) einschlie�lich 50 bis (x1,y1) ausschlie�lich. *) 51val kleb : bool -> pixelbild -> pixelbild -> pixelbild 52 (* H�ngt die Bilder aneinander. Der bool gibt an, ob das waagerecht 53 geschehen soll (sonst senkrecht). Je nachdem mu� die H�he oder Breite 54 der Bilder �bereinstimmen. *) 55val durchschnitt : int -> pixelbild -> pixelbild 56 (* Es werden je n*n pixel zusammengefasst, wobei n der int ist. 57 Es wird erwartet, da� die Ma�e des Bildes durch n teilbar sind. *) 58 59val extrahiere_farben: pixelbild -> palette * farbkarte 60val extrahiere_verteilung : pixelbild -> farbverteilung 61 62type farbreduktions_methode = 63| Heuristik_mittlerer_euklidischer 64| Heuristik_maximaler_euklidischer 65 66val reduziere_farben : 67 farbreduktions_methode -> palette -> int -> pixelbild -> palette 68 (* Die palette und der int sind wie bei Farbe.reduziere_farben1. *) 69 70 71 72val anz_xpm_zeichen : int 73 74val gib_xpm_aus_exakt: rgb_farbe -> string -> pixelbild -> unit 75val gib_xpm_aus_palette: rgb_farbe -> palette -> string -> pixelbild -> unit 76val gib_xpm_aus_anzahl: ?methode:farbreduktions_methode -> 77 rgb_farbe -> int -> string -> pixelbild -> unit 78val gib_xpm_aus: ?methode:farbreduktions_methode -> 79 rgb_farbe -> string -> pixelbild -> unit 80 (* Die rgb_farbe wird bei Mischfarben f�r durchsichtig und hintergrund 81 benutzt. 82 Der string ist der Dateiname. 83 Die letzten beiden Versionen reduzieren auf eine Anzahl an Farben. 84 Bei der letzten ist diese Anzahl anz_xpm_zeichen. 85 Die Default-Methode ist dabei Heuristik_maximaler_euklidischer. *) 86 87val gib_ppm_aus: string -> pixelbild -> unit 88 (* Der nicht-RGB-Anteil der Pixel wird ignoriert. *) 89 90val lies_xpm: string -> pixelbild 91val lies_ppm: string -> pixelbild 92val lies_pam: string -> pixelbild (* nur RGB_ALPHA *) 93 94