204 lines
4.0 KiB
Plaintext
204 lines
4.0 KiB
Plaintext
@startuml
|
|
skinparam packageStyle rectangle
|
|
|
|
' ============================
|
|
' PACKAGE mimage (MODEL - BLEU)
|
|
' ============================
|
|
package mimage {
|
|
|
|
class Pixel #aliceblue {
|
|
- r : int
|
|
- g : int
|
|
- b : int
|
|
+ Pixel(r, g, b)
|
|
+ getR()
|
|
+ getG()
|
|
+ getB()
|
|
+ setR(r)
|
|
+ setG(g)
|
|
+ setB(b)
|
|
}
|
|
|
|
class RGBImage #aliceblue {
|
|
- width : int
|
|
- height : int
|
|
- pixels : Pixel[*]
|
|
+ RGBImage(width, height)
|
|
+ getWidth()
|
|
+ getHeight()
|
|
+ getPixel(x, y)
|
|
+ setPixel(x, y, p)
|
|
}
|
|
|
|
}
|
|
|
|
RGBImage *-- Pixel : contient
|
|
|
|
|
|
' ============================
|
|
' PACKAGE mhuffman (MODEL - BLEU)
|
|
' ============================
|
|
package mhuffman {
|
|
|
|
class FrequencyTable #aliceblue {
|
|
- freqR : int[*]
|
|
- freqG : int[*]
|
|
- freqB : int[*]
|
|
+ computeFromImage(img)
|
|
+ getRed()
|
|
+ getGreen()
|
|
+ getBlue()
|
|
}
|
|
|
|
class HuffmanNode #aliceblue {
|
|
+ value : int
|
|
+ frequency : int
|
|
+ left : HuffmanNode
|
|
+ right : HuffmanNode
|
|
+ isLeaf()
|
|
}
|
|
|
|
class HuffmanTree #aliceblue {
|
|
- root : HuffmanNode
|
|
+ generateCodes()
|
|
}
|
|
|
|
class CanonicalCode #aliceblue {
|
|
- codeLengths : Map
|
|
- canonicalCodes : Map
|
|
+ getCode(value)
|
|
+ getLength(value)
|
|
}
|
|
|
|
}
|
|
|
|
FrequencyTable ..> RGBImage : analyse
|
|
HuffmanTree *-- HuffmanNode
|
|
CanonicalCode ..> HuffmanTree : dérive
|
|
|
|
|
|
' ============================
|
|
' PACKAGE util (MODEL - BLEU)
|
|
' ============================
|
|
package util {
|
|
|
|
class BitInputStream #aliceblue {
|
|
- fluxEntree
|
|
- octetCourant : int
|
|
- positionBit : int
|
|
- finDeFlux : boolean
|
|
|
|
+ BitInputStream(fluxEntree)
|
|
+ readBit() : int
|
|
+ readBits(nombreBits) : int
|
|
+ closeFlux()
|
|
}
|
|
|
|
class BitOutputStream #aliceblue {
|
|
- fluxSortie
|
|
- octetEnConstruction : int
|
|
- positionBit : int
|
|
- fluxFerme : boolean
|
|
|
|
+ BitOutputStream(fluxSortie)
|
|
+ writeBit(bit)
|
|
+ writeBits(valeur, nombreBits)
|
|
+ flush()
|
|
+ fermerFlux()
|
|
}
|
|
|
|
class ByteUtils #aliceblue {
|
|
<<utilitaire>>
|
|
+ toInt(high, low) : int
|
|
+ toBytes(value) : byte[]
|
|
}
|
|
|
|
class FileUtils #aliceblue {
|
|
<<utilitaire>>
|
|
+ isPIFFile(f) : boolean
|
|
+ readBinaryFile(path)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
' ============================
|
|
' PACKAGE mpif (MODEL - BLEU) — Sprint 2
|
|
' ============================
|
|
package mpif {
|
|
|
|
class PIFWriter #aliceblue {
|
|
+ writeHeader(out, width, height)
|
|
+ writeTables(out, red, green, blue)
|
|
+ encodePixels(out, img, red, green, blue)
|
|
+ writeToFile(path, img, red, green, blue)
|
|
}
|
|
|
|
' (optionnel) PIFImage si tu souhaite la représenter
|
|
class PIFImage #aliceblue {
|
|
- width : int
|
|
- height : int
|
|
- lenR : int[*]
|
|
- lenG : int[*]
|
|
- lenB : int[*]
|
|
- pixelData
|
|
}
|
|
|
|
}
|
|
|
|
PIFWriter ..> RGBImage
|
|
PIFWriter ..> CanonicalCode
|
|
PIFWriter ..> BitOutputStream
|
|
|
|
|
|
' ============================
|
|
' PACKAGE vconverter (VIEW - VERT)
|
|
' ============================
|
|
package vconverter {
|
|
|
|
class ConverterWindow #palegreen {
|
|
+ setImagePreview(img)
|
|
+ setFrequencyTable()
|
|
+ setHuffmanTable()
|
|
+ setCanonicalTable()
|
|
}
|
|
|
|
class PreviewPanel #palegreen {
|
|
- image
|
|
+ setImage(img)
|
|
}
|
|
|
|
class FrequencyTablePanel #palegreen {
|
|
+ updateFrequencies()
|
|
}
|
|
|
|
class CodeTablePanel #palegreen {
|
|
+ updateCodes()
|
|
}
|
|
|
|
ConverterWindow *-- PreviewPanel
|
|
ConverterWindow *-- FrequencyTablePanel
|
|
ConverterWindow *-- CodeTablePanel
|
|
|
|
}
|
|
|
|
|
|
' ============================
|
|
' CONTROLLER (ORANGE)
|
|
' ============================
|
|
class ConverterController #ffddaa {
|
|
+ loadImage(path)
|
|
+ computeFrequencies()
|
|
+ computeHuffman()
|
|
+ computeCanonical()
|
|
+ saveAsPIF(path)
|
|
}
|
|
|
|
ConverterController ..> RGBImage
|
|
ConverterController ..> FrequencyTable
|
|
ConverterController ..> HuffmanTree
|
|
ConverterController ..> CanonicalCode
|
|
ConverterController ..> PIFWriter : écrit le .pif
|
|
|
|
@enduml
|