first successful scan!

This commit is contained in:
Magnus Ulimoen 2020-07-24 21:41:25 +02:00
parent c860fd09a4
commit aae03e1f10
2 changed files with 38 additions and 4 deletions

View File

@ -6,6 +6,7 @@ edition = "2018"
[dependencies]
sane-sys = { path = "sane-sys" }
image = "0.23.7"
[workspace]
members = [

View File

@ -345,10 +345,17 @@ struct Acquisition<'a> {
impl<'a> Acquisition<'a> {
fn cancel(self) {}
fn get_image(self) -> Result<(), Error> {
fn get_image(self) -> Result<Image, Error> {
let parameters = self.handle.parameters()?;
let bytesize = parameters.bytes_per_line() * parameters.depth();
let bytesize = parameters.bytes_per_line()
* (parameters.depth() / 8)
* parameters.lines()
* if parameters.format() == SANE_Frame_SANE_FRAME_GRAY {
1
} else {
3
};
let mut image = vec![0_u8; bytesize as _];
let mut buffer = &mut image[..];
@ -378,7 +385,18 @@ impl<'a> Acquisition<'a> {
}
assert_eq!(buffer.len(), 0);
Ok(())
#[allow(non_upper_case_globals)]
match (parameters.format(), parameters.depth()) {
(SANE_Frame_SANE_FRAME_GRAY, 8) => Ok(Image::Gray8(
image::ImageBuffer::from_raw(
parameters.pixels_per_line() as _,
parameters.lines() as _,
image,
)
.unwrap(),
)),
(_, _) => unimplemented!(),
}
}
}
@ -388,7 +406,20 @@ impl Drop for Acquisition<'_> {
}
}
const TESTDEVICE: bool = true;
enum Image {
// Rgb8(image::ImageBuffer<image::Rgb<u8>, Vec<u8>>),
Gray8(image::ImageBuffer<image::Luma<u8>, Vec<u8>>),
}
impl Image {
fn save(&self, path: impl AsRef<std::path::Path>) -> image::ImageResult<()> {
match self {
Image::Gray8(im) => im.save(path),
}
}
}
const TESTDEVICE: bool = false;
fn main() {
let (context, version) = Context::init().unwrap();
@ -451,4 +482,6 @@ fn main() {
let acq = handle.start().unwrap();
let image = acq.get_image().unwrap();
image.save("test.png").unwrap();
}