aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/file.c15
-rw-r--r--src/main.c13
2 files changed, 27 insertions, 1 deletions
diff --git a/src/lib/file.c b/src/lib/file.c
new file mode 100644
index 0000000..b6ec1d0
--- /dev/null
+++ b/src/lib/file.c
@@ -0,0 +1,15 @@
+#include <lib/file.h>
+#include <stdio.h>
+
+// Write array to a file
+bool_t write_array(char* output_file_name, void* array, size_t size)
+{
+ FILE *file = fopen(output_file_name, "wb");
+ if (file == NULL) {
+ fprintf(stderr, "Error opening file %s\n", output_file_name);
+ return FALSE;
+ }
+ fwrite(array, size, 1, file);
+ fclose(file);
+ return TRUE;
+}
diff --git a/src/main.c b/src/main.c
index abfc57f..94315e4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,6 +6,7 @@
#include <lib/lib.h>
#include <lib/bool.h>
#include <lib/dir.h>
+#include <lib/file.h>
#include <lib/time.h>
#include <lib/color.h>
#include <lib/algo/flood_fill.h>
@@ -80,7 +81,9 @@ int main(int argc, char** argv)
// This assumes 4096 (2^12) > labels
for (size_t y = 0; y < height; y++) {
for (size_t x = 0; x < width; x++) {
- masks[x + y*width] |= 0xFF000000;
+ /// RGBA channels: Move labels to RGB
+ masks[x + y*width] <<= 4;
+ masks[x + y*width] |= 0x000F;
}
}
//-----------------------------------------------
@@ -139,6 +142,14 @@ int main(int argc, char** argv)
}
if (masks != NULL) {
+ for (size_t y = 0; y < height; y++) {
+ for (size_t x = 0; x < width; x++) {
+ /// Restore labels from RGBA
+ masks[x + y*width] &= 0xFFF0;
+ masks[x + y*width] >>= 4;
+ }
+ }
+ write_array("../out.bin", masks, width*height*sizeof(uint16_t));
free(masks);
}
CloseWindow();