X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FParasitemiaUI%2FPiaZ.fs;h=02152542d09407c37c7ecc460f5739531c557508;hb=b87b35b922551f122228df1fd9c530bbb807935a;hp=c9dfd5b8247d4022dfd1dcd810c38d1516654dec;hpb=cb90b01c85183b2c75ee6d22b378b3ca99df6bf3;p=master-thesis.git diff --git a/Parasitemia/ParasitemiaUI/PiaZ.fs b/Parasitemia/ParasitemiaUI/PiaZ.fs index c9dfd5b..0215254 100644 --- a/Parasitemia/ParasitemiaUI/PiaZ.fs +++ b/Parasitemia/ParasitemiaUI/PiaZ.fs @@ -18,31 +18,36 @@ let extension = ".piaz" let filter = "PIA|*.piaz" // Information associated to a document. -type JSONInformation = { - patientID: string - fileVersion: int -} +type JSONInformation = + { + patientID : string + fileVersion : int + } // Information associated to each images. -type JSONSourceImage = { - num: int - RBCRadius: float32 // The RBC Radius found by granulometry. - parameters: ParasitemiaCore.Config.Parameters - dateLastAnalysis: DateTime - rbcs: RBC List - - healthyRBCBrightness: float32 // 0 to 1. - infectedRBCBrightness: float32 // 0 to 1. -} - -type DocumentData = { - patientID: string - images: SourceImage list -} +type JSONSourceImage = + { + num : int + name : string + + RBCRadius : float32 // The RBC Radius found by granulometry. + parameters : ParasitemiaCore.Config.Parameters + dateLastAnalysis : DateTime + rbcs : RBC List + + healthyRBCBrightness : float32 // 0 to 1. + infectedRBCBrightness : float32 // 0 to 1. + } + +type DocumentData = + { + patientID : string + images : SourceImage list + } let mainEntryName = "info.json" let imageExtension = ".tiff" -let currentFileVersion = 1 +let currentFileVersion = 2 /// /// Save a document in a give file path. The file may already exist. @@ -50,7 +55,7 @@ let currentFileVersion = 1 /// /// /// If the file cannot be written -let save (filePath: string) (data: DocumentData) = +let save (filePath : string) (data : DocumentData) = use file = ZipFile.Open(filePath, ZipArchiveMode.Update) for e in List.ofSeq file.Entries do // 'ofSeq' to not iterate a collection currently modified. @@ -71,15 +76,20 @@ let save (filePath: string) (data: DocumentData) = use imgJSONFileWriter = new StreamWriter(imgJSONEntry.Open()) imgJSONFileWriter.Write( JsonConvert.SerializeObject( - { num = srcImg.num - RBCRadius = srcImg.config.RBCRadius.Pixel - parameters = srcImg.config.Parameters - dateLastAnalysis = srcImg.dateLastAnalysis - rbcs = srcImg.rbcs - healthyRBCBrightness = srcImg.healthyRBCBrightness - infectedRBCBrightness = srcImg.infectedRBCBrightness })) - -let updateDocumentData (fromVersion: int) (toVersion: int) (data: DocumentData) : DocumentData = + { + num = srcImg.num + name = srcImg.name + RBCRadius = srcImg.config.RBCRadius.Pixel + parameters = srcImg.config.Parameters + dateLastAnalysis = srcImg.dateLastAnalysis + rbcs = srcImg.rbcs + healthyRBCBrightness = srcImg.healthyRBCBrightness + infectedRBCBrightness = srcImg.infectedRBCBrightness + } + ) + ) + +let updateDocumentData (fromVersion : int) (toVersion : int) (data : DocumentData) : DocumentData = for v in fromVersion + 1 .. toVersion do match v with | 1 -> // Version 0 -> 1 : set initial brightness for rbc. @@ -92,7 +102,7 @@ let updateDocumentData (fromVersion: int) (toVersion: int) (data: DocumentData) /// /// /// If the file cannot be read -let load (filePath: string) : DocumentData = +let load (filePath : string) (defaultConfig : ParasitemiaCore.Config.Config) : DocumentData = use file = ZipFile.Open(filePath, ZipArchiveMode.Read) let mainEntry = file.GetEntry(mainEntryName) @@ -100,23 +110,38 @@ let load (filePath: string) : DocumentData = let info = JsonConvert.DeserializeObject(mainEntryReader.ReadToEnd()) updateDocumentData info.fileVersion currentFileVersion - { patientID = info.patientID - images = [ let mutable imgNum = 0 - for imgEntry in file.Entries do - if imgEntry.Name.EndsWith(imageExtension) - then + { + patientID = info.patientID + images = + [ + let mutable imgNum = 0 + for imgEntry in file.Entries do + if imgEntry.Name.EndsWith(imageExtension) then use bitmap = new System.Drawing.Bitmap(imgEntry.Open(), false) let img = new Image(bitmap) imgNum <- imgNum + 1 - let imgEntry = file.GetEntry(imgEntry.Name + ".json") - use imgEntryFileReader = new StreamReader(imgEntry.Open()) - let imgInfo = JsonConvert.DeserializeObject(imgEntryFileReader.ReadToEnd()) - let config = ParasitemiaCore.Config.Config(imgInfo.parameters) + let imgJSONEntry = file.GetEntry(imgEntry.Name + ".json") + use imgJSONFileReader = new StreamReader(imgJSONEntry.Open()) + let imgInfo = JsonConvert.DeserializeObject(imgJSONFileReader.ReadToEnd()) + + let config = defaultConfig.Copy() + config.Parameters <- + { + ParasitemiaCore.Config.defaultParameters with + resolution = imgInfo.parameters.resolution + } + config.SetRBCRadius imgInfo.RBCRadius - yield { num = imgNum + yield + { + num = imgNum + name = imgInfo.name config = config dateLastAnalysis = imgInfo.dateLastAnalysis img = img rbcs = imgInfo.rbcs healthyRBCBrightness = imgInfo.healthyRBCBrightness - infectedRBCBrightness = imgInfo.infectedRBCBrightness } ] } \ No newline at end of file + infectedRBCBrightness = imgInfo.infectedRBCBrightness + } + ] + } \ No newline at end of file