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