diff options
Diffstat (limited to 'src/asicam')
| -rw-r--r-- | src/asicam/mod.rs | 28 | 
1 files changed, 16 insertions, 12 deletions
diff --git a/src/asicam/mod.rs b/src/asicam/mod.rs index 4d006ae..93ed683 100644 --- a/src/asicam/mod.rs +++ b/src/asicam/mod.rs @@ -117,25 +117,29 @@ impl Camera {              ASICamera2::ASIGetDataAfterExp(                  self.id,                  self.image_buffer, -                self.curr_width as i64 * self.curr_height as i64 * 3 +                self.curr_width as i64 * self.curr_height as i64 * 2              )          };          build_result((), res)?; +        let mut real_image = vec![0; self.curr_width as usize * self.curr_height as usize * 2 * 3]; +        for i in 0..(self.curr_width * self.curr_height) { +            unsafe { +            real_image[i as usize * 6 + 0] = *self.image_buffer.offset(i as isize * 2 + 1); +            real_image[i as usize * 6 + 2] = *self.image_buffer.offset(i as isize * 2 + 1); +            real_image[i as usize * 6 + 4] = *self.image_buffer.offset(i as isize * 2 + 1); +            real_image[i as usize * 6 + 1] = *self.image_buffer.offset(i as isize * 2); +            real_image[i as usize * 6 + 3] = *self.image_buffer.offset(i as isize * 2); +            real_image[i as usize * 6 + 5] = *self.image_buffer.offset(i as isize * 2); +            } +        }          let dest = Path::new(path);          let file = File::create(dest).unwrap();          let ref mut w = BufWriter::new(file);          let mut encoder = png::Encoder::new(w, self.curr_width, self.curr_height); -        encoder.set(png::ColorType::RGB).set(png::BitDepth::Eight); +        encoder.set(png::ColorType::RGB).set(png::BitDepth::Sixteen);          let mut writer = encoder.write_header().unwrap(); -        writer.write_image_data( -            unsafe { -                std::slice::from_raw_parts( -                    self.image_buffer, -                    self.curr_width as usize * self.curr_height as usize* 3 -                ) -            } -        ).unwrap(); +        writer.write_image_data(&real_image).unwrap();          Ok(())      } @@ -248,10 +252,10 @@ pub fn acquire(camera_id: i32) -> Result<Camera> {          camera.curr_height = camera_props.max_height as u32;          camera.color_format = ImageType::RGB24;          camera.image_buffer = alloc( -            Layout::from_size_align(camera.curr_width as usize * camera.curr_height as usize * 3, 8).unwrap() +            Layout::from_size_align(camera.curr_width as usize * camera.curr_height as usize * 2, 8).unwrap()          ); -        let res = ASICamera2::ASISetROIFormat(camera_id, camera.width as i32, camera.height as i32, 1, ImageType::RGB24 as i32); +        let res = ASICamera2::ASISetROIFormat(camera_id, camera.width as i32, camera.height as i32, 1, ImageType::RAW16 as i32);          build_result((), res)?;          println!("Set ROI/Format");  | 
