|
1 | 1 | use std::ffi::{CStr, CString};
|
| 2 | +use std::io::{Read, Seek, SeekFrom}; |
2 | 3 | use std::mem;
|
3 | 4 | use std::os::raw::{c_char, c_longlong, c_uint};
|
4 | 5 | use std::ptr::{null, null_mut};
|
@@ -82,14 +83,48 @@ impl NativeImageAsset {
|
82 | 83 | }
|
83 | 84 | self.image = None;
|
84 | 85 | let real_path = unsafe { CStr::from_ptr(path) }.to_str().unwrap_or("");
|
85 |
| - let result = image::open(real_path); |
86 |
| - match result { |
87 |
| - Ok(result) => { |
88 |
| - self.image = Some(result); |
89 |
| - 1 |
| 86 | + let file = std::fs::File::open(real_path); |
| 87 | + match file { |
| 88 | + Ok(file) => { |
| 89 | + let mut reader = std::io::BufReader::new(file); |
| 90 | + let mut bytes = [0; 16]; |
| 91 | + let result = reader.read(&mut bytes); |
| 92 | + match result { |
| 93 | + Ok(_) => { |
| 94 | + let _ = reader.seek(SeekFrom::Start(0)); |
| 95 | + let mime = image::guess_format(&bytes); |
| 96 | + match mime { |
| 97 | + Ok(mime) => match image::load(reader, mime) { |
| 98 | + Ok(result) => { |
| 99 | + self.image = Some(result); |
| 100 | + 1 |
| 101 | + } |
| 102 | + Err(e) => { |
| 103 | + let error = e.to_string(); |
| 104 | + self.error.clear(); |
| 105 | + self.error.push_str(error.as_str()); |
| 106 | + 0 |
| 107 | + } |
| 108 | + }, |
| 109 | + Err(e) => { |
| 110 | + let error = e.to_string(); |
| 111 | + self.error.clear(); |
| 112 | + self.error.push_str(error.as_str()); |
| 113 | + 0 |
| 114 | + } |
| 115 | + } |
| 116 | + } |
| 117 | + Err(e) => { |
| 118 | + let error = e.to_string(); |
| 119 | + self.error.clear(); |
| 120 | + self.error.push_str(error.as_str()); |
| 121 | + 0 |
| 122 | + } |
| 123 | + } |
90 | 124 | }
|
91 | 125 | Err(e) => {
|
92 | 126 | let error = e.to_string();
|
| 127 | + self.error.clear(); |
93 | 128 | self.error.push_str(error.as_str());
|
94 | 129 | 0
|
95 | 130 | }
|
|
0 commit comments