Bitmaps


... [ Seminar "Einführung in Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ...

Bitmaps


Einleitung

Um mit digitalen Fotos arbeiten zu können, müssen zwei Unterschiede zwischen „unserer“ Definition von Bildern und digitalen Fotos, die in diversen Dateiformaten auftreten können, beachtet werden:
Digitale Fotos werden deshalb durch Dimensionen und eine „subscripting“ Funktion beschrieben.

data Array2 α = Array2 Int Int ((Int, Int) α)

Der Wert Array2 n m f repräsentiert die n:m Reihen, mit f als Index.
Anstatt nun ein Array eines konkreten Formates zu erstellen und zu speichern, wird die Konversion von der Dateirepräsentation (z.B. 1, 8, 16, 24 Bit pro Pixel) direkt während des subscripting durchgeführt. Die Konversion besteht aus einer Überprüfung ob sich die Punkte innerhalb oder ausserhalb der Bildfläche befinden. Ausserhlab liegende Punkte werden unsichtbar. Innenliegende Punkte müssen interpoliert werden, sie nicht direkt einem Punkt aus dem diskreten Set von Punkten zu geordnet werden können. Zur Interpolation werden die vier direkt benachbarten gewichtet herangezogen.



Darstellung

Subscription

bilerpArray2                :: ((Int, Int) Colour) ImageC
bilerpArray2 sub (x, y) =
let
i = x; wx = x - fromInt i
j = y; wy = y - fromInt j
in
bilerpC (sub (i, j )) (sub (i + 1, j ))
(sub (i, j + 1)) (sub (i + 1, j + 1))
(wx,wy) (1)

(1) wx, wy sind die Gewichtung

Abschliessend wird das Bild in einem unendlichen Bild rekonstruiert. Hierbei werden ausserhalb des ursprünglichen Bildes liegende Punkte unsichtbar.
Dann wird das Bild noch auf den Koordinatenursprung zentriert.

reconstruct :: Array2 Colour ImageC
reconstruct (Array2 w hsub) =
move (- fromInt w / 2, - fromInt h / 2)
(crop (inBounds w h) (bilerpArray2 sub)) (2)

inBounds :: Int Int Region
inBounds w h (x, y) = <= x  &&  <=  fromInt (w - 1) &&
<= y && y <=  fromInt (h - 1)

(2) move zentriert das Bild auf den Ursprung.




... [ Seminar "Einführung in Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ... [ nach oben ] ...