|
|
@ -19,6 +19,22 @@ struct png_image {
|
|
19
|
19
|
message: [u8; 64],
|
|
20
|
20
|
}
|
|
21
|
21
|
|
|
|
22
|
impl std::fmt::Display for png_image {
|
|
|
23
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
|
24
|
fn get_message(msg: [u8; 64]) -> String {
|
|
|
25
|
let mut vec = Vec::new();
|
|
|
26
|
for i in 0..64 {
|
|
|
27
|
vec.push(msg[i]);
|
|
|
28
|
}
|
|
|
29
|
String::from_utf8(vec).unwrap()
|
|
|
30
|
}
|
|
|
31
|
|
|
|
32
|
write!(f, "{}x{} {} {} {} {} {} {}", self.width, self.height, self.version,
|
|
|
33
|
self.format, self.flags, self.colormap_entries, self.warning_or_error,
|
|
|
34
|
get_message(self.message))
|
|
|
35
|
}
|
|
|
36
|
}
|
|
|
37
|
|
|
22
|
38
|
#[link(name = "png")]
|
|
23
|
39
|
extern {
|
|
24
|
40
|
fn png_image_begin_read_from_file(img: *mut png_image, file_name: *const u8) -> libc::c_int;
|
|
|
@ -28,24 +44,12 @@ fn main() {
|
|
28
|
44
|
let x = unsafe { cos(3.1415) };
|
|
29
|
45
|
println!("cos(3.1415) = {}", x);
|
|
30
|
46
|
|
|
31
|
|
fn get_message(msg: [u8; 64]) -> String {
|
|
32
|
|
let mut vec = Vec::new();
|
|
33
|
|
for i in 0..64 {
|
|
34
|
|
vec.push(msg[i]);
|
|
35
|
|
}
|
|
36
|
|
String::from_utf8(vec).unwrap()
|
|
37
|
|
}
|
|
38
|
|
|
|
39
|
|
fn print_img(img: &png_image) {
|
|
40
|
|
println!("{}x{} {} {} {} {} {} {}", img.width, img.height, img.version, img.format, img.flags, img.colormap_entries, img.warning_or_error, get_message(img.message))
|
|
41
|
|
}
|
|
42
|
|
|
|
43
|
47
|
unsafe {
|
|
44
|
48
|
let mut img: png_image = std::mem::zeroed();
|
|
45
|
49
|
img.version = 1;
|
|
46
|
|
print_img(&img);
|
|
|
50
|
println!("{}", img);
|
|
47
|
51
|
let res = png_image_begin_read_from_file(&mut img, "mei.png\0".as_ptr());
|
|
48
|
52
|
println!("read_from_file: {}", res);
|
|
49
|
|
print_img(&img);
|
|
|
53
|
println!("{}", img);
|
|
50
|
54
|
}
|
|
51
|
55
|
}
|