MCPcopy Create free account
hub / github.com/7thSamurai/steganography / encode

Method encode

src/image.cpp:33–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31}
32
33void Image::encode(const std::uint8_t *data, std::size_t size, EncodingLevel level, std::size_t offset) {
34 auto image = this->image.get() + offset;
35
36 if (level == EncodingLevel::Low) {
37 for (auto i = 0; i < size; i++, image += 8) {
38 image[0] = (image[0] & ~0b1) | ((data[i] >> 0) & 0b1);
39 image[1] = (image[1] & ~0b1) | ((data[i] >> 1) & 0b1);
40 image[2] = (image[2] & ~0b1) | ((data[i] >> 2) & 0b1);
41 image[3] = (image[3] & ~0b1) | ((data[i] >> 3) & 0b1);
42 image[4] = (image[4] & ~0b1) | ((data[i] >> 4) & 0b1);
43 image[5] = (image[5] & ~0b1) | ((data[i] >> 5) & 0b1);
44 image[6] = (image[6] & ~0b1) | ((data[i] >> 6) & 0b1);
45 image[7] = (image[7] & ~0b1) | ((data[i] >> 7) & 0b1);
46 }
47 }
48
49 else if (level == EncodingLevel::Med) {
50 for (auto i = 0; i < size; i++, image += 4) {
51 image[0] = (image[0] & ~0b11) | ((data[i] >> 0) & 0b11);
52 image[1] = (image[1] & ~0b11) | ((data[i] >> 2) & 0b11);
53 image[2] = (image[2] & ~0b11) | ((data[i] >> 4) & 0b11);
54 image[3] = (image[3] & ~0b11) | ((data[i] >> 6) & 0b11);
55 }
56 }
57
58 // High
59 else {
60 for (auto i = 0; i < size / 2; i++, image += 4, data += 2) {
61 image[0] = (image[0] & ~0xf) | (data[0] & 0xf);
62 image[1] = (image[1] & ~0xf) | (data[0] >> 4);
63 image[2] = (image[2] & ~0xf) | (data[1] & 0xf);
64 image[3] = (image[3] & ~0xf) | (data[1] >> 4);
65 }
66
67 if (size % 2) {
68 image[0] = (image[0] & ~0xf) | (*data & 0xf);
69 image[1] = (image[1] & ~0xf) | (*data >> 4);
70 }
71 }
72}
73
74std::unique_ptr<std::uint8_t[]> Image::decode(std::size_t size, EncodingLevel level, std::size_t offset) {
75 auto data = std::make_unique<std::uint8_t[]>(size);

Callers 1

encodeFunction · 0.80

Calls 1

getMethod · 0.45

Tested by

no test coverage detected