mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
Merge branch 'main' into port_cpp_qrcode
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "rxing"
|
name = "rxing"
|
||||||
version = "0.3.2"
|
version = "0.4.1"
|
||||||
description="A rust port of the zxing barcode library."
|
description="A rust port of the zxing barcode library."
|
||||||
license="Apache-2.0"
|
license="Apache-2.0"
|
||||||
repository="https://github.com/rxing-core/rxing"
|
repository="https://github.com/rxing-core/rxing"
|
||||||
@@ -25,7 +25,7 @@ image = {version = "0.24", optional = true}
|
|||||||
imageproc = {version = "0.23", optional = true}
|
imageproc = {version = "0.23", optional = true}
|
||||||
unicode-segmentation = "1.10"
|
unicode-segmentation = "1.10"
|
||||||
codepage-437 = "0.1.0"
|
codepage-437 = "0.1.0"
|
||||||
rxing-one-d-proc-derive = {version = "0.3", path ="./crates/one-d-proc-derive"}
|
rxing-one-d-proc-derive = {version = "0.4", path ="./crates/one-d-proc-derive"}
|
||||||
num = "0.4.0"
|
num = "0.4.0"
|
||||||
svg = {version = "0.13", optional = true}
|
svg = {version = "0.13", optional = true}
|
||||||
resvg = {version = "0.28.0", optional = true, default-features=false}
|
resvg = {version = "0.28.0", optional = true, default-features=false}
|
||||||
|
|||||||
@@ -76,6 +76,13 @@ fn main() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Latest Release Notes
|
## Latest Release Notes
|
||||||
|
* *v0.4.0* -> Rewrite of the API to implement generics. This largely eliminates dynamic dispatch from the library.
|
||||||
|
|
||||||
|
This release has many under-the-hood changes: better Point class, better Error handling, improved API
|
||||||
|
ergonomics with dynamics. For an understanding of how the new API works check out the `helper` functions.
|
||||||
|
This release was made possible with PRs from Asha20 and SteveCookTU. A big thanks to them. This release does
|
||||||
|
not have the improved QRCode support from the ZXing-CPP library, as that port is still in progress.
|
||||||
|
|
||||||
* *v0.3.1* -> Support for closures in NEEDS_RESULT_CALLBACK. Numerous code cleanups were performed between *v0.3.0* and *v.0.3.1* rxing has moved to https://github.com/rxing-core/rxing.
|
* *v0.3.1* -> Support for closures in NEEDS_RESULT_CALLBACK. Numerous code cleanups were performed between *v0.3.0* and *v.0.3.1* rxing has moved to https://github.com/rxing-core/rxing.
|
||||||
* *v0.2.21* -> Adds partial support for detecting and decoding rotated MaxiCode symbols. Adds support for basic serialization of many public facing datatypes using serde (gated behind `serde` feature).
|
* *v0.2.21* -> Adds partial support for detecting and decoding rotated MaxiCode symbols. Adds support for basic serialization of many public facing datatypes using serde (gated behind `serde` feature).
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "rxing-cli"
|
name = "rxing-cli"
|
||||||
version = "0.1.12"
|
version = "0.1.13"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "A command line interface for rxing supporting encoding and decoding of multiple barcode formats"
|
description = "A command line interface for rxing supporting encoding and decoding of multiple barcode formats"
|
||||||
license="Apache-2.0"
|
license="Apache-2.0"
|
||||||
@@ -11,4 +11,4 @@ keywords = ["barcode", "2d_barcode", "1d_barcode", "barcode_reader", "barcode_wr
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.1.1", features = ["derive"] }
|
clap = { version = "4.1.1", features = ["derive"] }
|
||||||
rxing = {path = "../../", version = "~0.3.2", features = ["image", "svg_read", "svg_write"] }
|
rxing = {path = "../../", version = "~0.4.0", features = ["image", "svg_read", "svg_write"] }
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "rxing-one-d-proc-derive"
|
name = "rxing-one-d-proc-derive"
|
||||||
repository = "https://github.com/rxing-core/rxing/tree/main/crates/one-d-proc-derive"
|
repository = "https://github.com/rxing-core/rxing/tree/main/crates/one-d-proc-derive"
|
||||||
version = "0.3.1"
|
version = "0.4.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "proc macros to simplify the development of one-d barcode symbologies in rxing (https://github.com/rxing-core/rxing)"
|
description = "proc macros to simplify the development of one-d barcode symbologies in rxing (https://github.com/rxing-core/rxing)"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -98,20 +98,22 @@ impl LuminanceSource for Luma8LuminanceSource {
|
|||||||
|
|
||||||
impl Luma8LuminanceSource {
|
impl Luma8LuminanceSource {
|
||||||
fn reverseColumns(&mut self) {
|
fn reverseColumns(&mut self) {
|
||||||
for i in 0..self.get_width() {
|
for col in 0..(self.get_width()) {
|
||||||
let mut j = 0;
|
let mut a = 0;
|
||||||
let mut k = self.get_width() - 1;
|
let mut b = self.get_height() - 1;
|
||||||
while j < k {
|
while a < b {
|
||||||
let offset_a = (self.get_width() * i) + j;
|
let offset_a = a * self.get_width() + col;
|
||||||
let offset_b = (self.get_width() * i) + k;
|
let offset_b = b * self.get_width() + col;
|
||||||
self.data.swap(offset_a, offset_b);
|
self.data.swap(offset_a, offset_b);
|
||||||
j += 1;
|
|
||||||
k -= 1;
|
a += 1;
|
||||||
|
b -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// print_matrix(&self.data, self.get_width(), self.get_height());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn transpose(&mut self) {
|
fn transpose_square(&mut self) {
|
||||||
for i in 0..self.get_height() {
|
for i in 0..self.get_height() {
|
||||||
for j in i..self.get_width() {
|
for j in i..self.get_width() {
|
||||||
let offset_a = (self.get_width() * i) + j;
|
let offset_a = (self.get_width() * i) + j;
|
||||||
@@ -120,6 +122,30 @@ impl Luma8LuminanceSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn transpose_rect(&mut self) {
|
||||||
|
let mut new_data = vec![0; self.data.len()];
|
||||||
|
let new_dim = (self.dimensions.1, self.dimensions.0);
|
||||||
|
for i in 0..self.get_height() {
|
||||||
|
for j in 0..self.get_width() {
|
||||||
|
let offset_a = (self.get_width() * i) + j;
|
||||||
|
let offset_b = (self.get_height() * j) + i;
|
||||||
|
new_data[offset_b] = self.data[offset_a];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.data = new_data;
|
||||||
|
self.dimensions = new_dim;
|
||||||
|
self.original_dimension = (self.original_dimension.1, self.original_dimension.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn transpose(&mut self) {
|
||||||
|
if self.get_width() == self.get_height() {
|
||||||
|
self.transpose_square()
|
||||||
|
} else {
|
||||||
|
self.transpose_rect()
|
||||||
|
}
|
||||||
|
// print_matrix(&self.data, self.get_width(), self.get_height());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Luma8LuminanceSource {
|
impl Luma8LuminanceSource {
|
||||||
@@ -142,3 +168,57 @@ impl Luma8LuminanceSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{Luma8LuminanceSource, LuminanceSource};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rotate() {
|
||||||
|
let src_square = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||||
|
|
||||||
|
let src_rect = vec![0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0];
|
||||||
|
|
||||||
|
let square = Luma8LuminanceSource::new(src_square, 3, 3);
|
||||||
|
let rect_tall = Luma8LuminanceSource::new(src_rect.clone(), 3, 4);
|
||||||
|
let rect_wide = Luma8LuminanceSource::new(src_rect.clone(), 4, 3);
|
||||||
|
|
||||||
|
let rotated_square = square.rotate_counter_clockwise().expect("rotate");
|
||||||
|
// print_matrix(&src_rect, 4, 3);
|
||||||
|
let rotated_wide_rect = rect_wide.rotate_counter_clockwise().expect("rotate");
|
||||||
|
// print_matrix(&src_rect, 3, 4);
|
||||||
|
let rotated_tall_rect = rect_tall.rotate_counter_clockwise().expect("rotate");
|
||||||
|
|
||||||
|
assert_eq!(rotated_square.dimensions, square.dimensions);
|
||||||
|
assert_eq!(
|
||||||
|
rotated_tall_rect.dimensions,
|
||||||
|
(rect_tall.dimensions.1, rect_tall.dimensions.0)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
rotated_wide_rect.dimensions,
|
||||||
|
(rect_wide.dimensions.1, rect_wide.dimensions.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(rotated_square.data, vec![3, 6, 9, 2, 5, 8, 1, 4, 7]);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
rotated_wide_rect.data,
|
||||||
|
vec![1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1]
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
rotated_tall_rect.data,
|
||||||
|
vec![0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fn print_matrix(matrix: &[u8], width: usize, height: usize) {
|
||||||
|
// for y in 0..height {
|
||||||
|
// for x in 0..width {
|
||||||
|
// print!("{}, ",matrix[y*width + x ]);
|
||||||
|
// }
|
||||||
|
// println!()
|
||||||
|
// }
|
||||||
|
// println!()
|
||||||
|
// }
|
||||||
|
|||||||
Reference in New Issue
Block a user