@@ -15,27 +15,27 @@ struct Opt {
15
15
file : String
16
16
}
17
17
18
- #[ derive( Clone ) ]
18
+ #[ derive( Clone , Debug ) ]
19
19
struct VecBlock {
20
20
width : usize , height : usize ,
21
21
pixels : Vec < u8 >
22
22
}
23
23
24
24
#[ derive( Debug , Clone ) ]
25
- struct EdbtcBlock {
25
+ struct OdbtcBlock {
26
26
high_color : u8 , low_color : u8 ,
27
27
pixels : Vec < u8 > ,
28
28
width : usize , height : usize
29
29
}
30
30
31
- impl fmt:: Display for EdbtcBlock { fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
32
- return write ! ( f, "EdbtcBlock with a = {}, b = {} has pixels {:?}" , self . high_color, self . low_color, self . pixels) ;
31
+ impl fmt:: Display for OdbtcBlock { fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
32
+ return write ! ( f, "OdbtcBlock with a = {}, b = {} has pixels {:?}" , self . high_color, self . low_color, self . pixels) ;
33
33
} }
34
34
35
- struct EdbtcImage {
35
+ struct OdbtcImage {
36
36
block_count_x : usize ,
37
37
width : usize , height : usize ,
38
- blocks : Vec < EdbtcBlock >
38
+ blocks : Vec < OdbtcBlock >
39
39
}
40
40
41
41
fn get_block_nb ( i : usize , img_width : usize , block_width : usize , block_height : usize , block_count_x : usize ) -> ( usize , usize , usize ) {
@@ -100,14 +100,13 @@ fn build_blocks(pixels : &Vec<u8>, img_width: usize, img_height: usize, block_si
100
100
block. pixels . push ( pixels[ i] ) ;
101
101
}
102
102
103
- // println!("{:?}, {:?}", blocks[0].len(), blocks[0]);
104
- // println!("{:?}", pixels.len());
103
+ // println!("Generated {:?} VecBlocks", blocks.len());
105
104
106
105
return ( blocks, block_count_x, block_count_y) ;
107
106
}
108
107
109
- fn encode_blocks ( blocks : & Vec < VecBlock > , block_size : usize , block_count_x : usize , img_width : usize , img_height : usize ) -> EdbtcImage {
110
- let mut result : EdbtcImage = EdbtcImage { block_count_x : block_count_x, blocks : vec ! [ ] , width : img_width, height : img_height} ;
108
+ fn encode_blocks ( blocks : & Vec < VecBlock > , block_size : usize , block_count_x : usize , img_width : usize , img_height : usize ) -> OdbtcImage {
109
+ let mut result : OdbtcImage = OdbtcImage { block_count_x : block_count_x, blocks : vec ! [ ] , width : img_width, height : img_height} ;
111
110
for i in 0 ..blocks. len ( ) {
112
111
let block = & blocks[ i] ;
113
112
@@ -125,29 +124,32 @@ fn encode_blocks(blocks : &Vec<VecBlock>, block_size: usize, block_count_x: usiz
125
124
}
126
125
127
126
128
- let newblock = EdbtcBlock { pixels : pix, low_color : min, high_color : max, width : block. width , height : block. height } ;
129
- println ! ( "newblock : {}" , newblock) ;
127
+ let newblock = OdbtcBlock { pixels : pix, low_color : min, high_color : max, width : block. width , height : block. height } ;
128
+ // println!("newblock : {}", newblock);
130
129
result. blocks . push ( newblock) ;
131
130
132
131
}
133
132
133
+ // println!("Generated {:?} blocks", result.blocks.len());
134
+
134
135
return result;
135
136
}
136
137
137
- fn edbtc_encode ( image : image:: DynamicImage , block_size : usize ) -> EdbtcImage {
138
+ fn odbtc_encode ( image : image:: DynamicImage , block_size : usize ) -> OdbtcImage {
138
139
println ! ( "Encoding..." ) ;
139
140
140
141
let pixels : Vec < u8 > = image. raw_pixels ( ) ;
141
142
let size = image. dimensions ( ) ;
142
143
let width = size. 0 as usize ;
143
144
let height = size. 1 as usize ;
145
+ println ! ( "{:?} {:?}" , width, height) ;
144
146
145
- let ( blocks, block_count_x, block_count_y ) = build_blocks ( & pixels, width, height, block_size) ;
146
- return encode_blocks ( & blocks, block_size, block_count_x, block_count_y , width ) ;
147
+ let ( blocks, block_count_x, _ ) = build_blocks ( & pixels, width, height, block_size) ;
148
+ return encode_blocks ( & blocks, block_size, block_count_x, width , height ) ;
147
149
148
150
}
149
151
150
- fn edbtc_decode ( image : EdbtcImage ) -> image:: DynamicImage {
152
+ fn odbtc_decode ( image : OdbtcImage ) -> image:: DynamicImage {
151
153
println ! ( "Decoding..." ) ;
152
154
153
155
let mut pixels : Vec < u8 > = vec ! [ ] ;
@@ -158,6 +160,7 @@ fn edbtc_decode(image: EdbtcImage) -> image::DynamicImage {
158
160
159
161
160
162
// println!("{:?}, {:?}", basewidth, baseheight);
163
+ // println!("{:?} {:?} {:?}", image.width, image.height, fullsize);
161
164
162
165
for i in 0 ..fullsize {
163
166
@@ -200,23 +203,20 @@ fn main() {
200
203
println ! ( "Saving input image" ) ;
201
204
img. save ( "./input.png" ) . unwrap ( ) ;
202
205
203
- let output_4 = edbtc_decode ( edbtc_encode ( img. clone ( ) , 4 ) ) ;
204
- let output_8 = edbtc_decode ( edbtc_encode ( img. clone ( ) , 8 ) ) ;
205
- //let output_16 = edbtc_decode(edbtc_encode(img.clone(), 16));
206
- //let output_32 = edbtc_decode(edbtc_encode(img.clone(), 32));
207
-
208
- println ! ( "HPSNR 4x4 : {}" , img_quality:: hpsnr( & img, & output_4) . unwrap( ) ) ;
209
- println ! ( "HPSNR 8x8 : {}" , img_quality:: hpsnr( & img, & output_8) . unwrap( ) ) ;
210
- //println!("HPSNR 16x16 : {}", img_quality::hpsnr(&img, &output_16).unwrap());
211
- //println!("HPSNR 32x32 : {}", img_quality::hpsnr(&img, &output_32).unwrap());
212
-
213
-
206
+ let output_4 = odbtc_decode ( odbtc_encode ( img. clone ( ) , 4 ) ) ;
207
+ let output_8 = odbtc_decode ( odbtc_encode ( img. clone ( ) , 8 ) ) ;
208
+ let output_16 = odbtc_decode ( odbtc_encode ( img. clone ( ) , 16 ) ) ;
209
+ let output_32 = odbtc_decode ( odbtc_encode ( img. clone ( ) , 32 ) ) ;
214
210
215
211
println ! ( "Saving results" ) ;
216
- output_4. save ( "./output4.png" ) . unwrap ( ) ;
217
212
output_8. save ( "./output8.png" ) . unwrap ( ) ;
218
- //output_16.save("./output16.png").unwrap();
219
- //output_32.save("./output32.png").unwrap();
213
+ output_4. save ( "./output4.png" ) . unwrap ( ) ;
214
+ output_16. save ( "./output16.png" ) . unwrap ( ) ;
215
+ output_32. save ( "./output32.png" ) . unwrap ( ) ;
220
216
217
+ println ! ( "HPSNR 4x4 : {}" , img_quality:: hpsnr( & img, & output_4) . unwrap( ) ) ;
218
+ println ! ( "HPSNR 8x8 : {}" , img_quality:: hpsnr( & img, & output_8) . unwrap( ) ) ;
219
+ println ! ( "HPSNR 16x16 : {}" , img_quality:: hpsnr( & img, & output_16) . unwrap( ) ) ;
220
+ println ! ( "HPSNR 32x32 : {}" , img_quality:: hpsnr( & img, & output_32) . unwrap( ) ) ;
221
221
222
222
}
0 commit comments