29 using std::stringstream;
34 bool is_encode =
false;
35 string msg_file =
"msg.txt";
36 string input_file =
"source.bmp";
37 string output_file =
"target.bmp";
40 bool ParseCmdParams(
int argc,
char* argv[])
45 if (0 != strcmp(
"-d", argv[1]))
55 if (0 != strcmp(
"-e", argv[1]))
76 cout <<
"\nUsage: sgraphy [-e message_path] [-d] input output\n\n"
78 <<
" -e\t\tEncodes the specified message_path into the input file\n"
79 <<
" -d\t\tDecodes an embedded message from input, and stores in output\n"
81 <<
" -e and -d are mutually exclusive.\n\n";
85 string ReadFile(
const string& path)
87 std::ifstream input_file(path);
90 data << input_file.rdbuf();
96 void WriteFile(
const string& path,
99 std::ofstream output_file(path);
104 void weave_data ( Hg::rgba_t& pixel,
114 pixel.blue = (pixel.blue & ~k_data_mask)
115 | (value.d0 & k_data_mask);
116 pixel.green = (pixel.green & ~k_data_mask)
117 | (value.d1 & k_data_mask);
118 pixel.red = (pixel.red & ~k_data_mask)
119 | (value.d2 & k_data_mask);
120 pixel.alpha = (pixel.alpha & ~k_data_mask)
121 | (value.d3 & k_data_mask);
125 void extract_data ( Hg::rgba_t& pixel,
135 value.d0 = (pixel.blue & k_data_mask);
136 value.d1 = (pixel.green & k_data_mask);
137 value.d2 = (pixel.red & k_data_mask);
138 value.d3 = (pixel.alpha & k_data_mask);
144 int main(
int argc,
char* argv[])
146 if (!ParseCmdParams(argc, argv))
152 string message = ReadFile(msg_file);
155 bmp.Load(input_file);
159 bmp.process(message, weave_data);
160 bmp.Store(output_file);
164 bmp.process(message, extract_data);
165 WriteFile(output_file, message);