• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 三方开源软件sane-backends
2## SANE简介
3SANE是一个应用程序编程接口(API),它提供对任何光栅图像扫描仪硬件(平板扫描仪、手持式扫描仪、视频和静态摄像机、帧处理器等)的标准化访问。
4
5您也可以通过[SANE官网主页](http://sane-project.org/)了解更多关于SANE项目的信息。
6
7## 引入背景简述
8OpenHarmony南向生态发展过程中,需要对存量市场的扫描仪进行兼容。使用SANE扫描系统能直接对接市场上大部分的扫描仪,也减少了扫描仪驱动适配OpenHarmony系统的难度。
9
10## 目录结构
11```
12- LICENSE                           版权文件
13- OAT.xml                           OAT.xml过滤配置文件
14- README.OpenSource                 项目README.OpenSource文件
15- README.md                         英文说明
16- README_zh.md                      中文说明
17- backend                           扫描设备后端源码
18- include                           SANE API接口
19- lib                               SANE 库源码
20- sanei                             SANE 内部实用函数和工具
21- doc                               文档和说明文件
22```
23
24## 如何使用
25### 1、头文件引入
26```c
27#include <sane/sane.h>
28```
29### 2、添加编译依赖
30在您的 bundle.json 文件 添加
31```json
32"deps": {
33  "third_party": [
34    "backends"
35  ]
36}
37```
38在您的BUILD.gn需要的地方添加依赖
39```json
40deps += [ "//third_party/backends:third_sane" ]
41include_dirs += [ "//third_party/backends/include" ]
42```
43```c
44SANE_Status status;
45SANE_Handle handle;
46
47// Initialize SANE
48status = sane_init(NULL, NULL);
49if (status != SANE_STATUS_GOOD) {
50    fprintf(stderr, "Failed to initialize SANE: %s\n", sane_strstatus(status));
51    return 1;
52}
53
54// Open the first scanner device
55status = sane_open("your_scanner_device_name", &handle);
56if (status != SANE_STATUS_GOOD) {
57    fprintf(stderr, "Failed to open scanner: %s\n", sane_strstatus(status));
58    return 1;
59}
60
61// Get scanner device information
62const SANE_Device *device_info;
63status = sane_get_devices(&device_info, SANE_FALSE);
64if (status != SANE_STATUS_GOOD) {
65    fprintf(stderr, "Failed to get scanner device information: %s\n", sane_strstatus(status));
66    return 1;
67}
68
69// Set scan parameters
70SANE_Parameters parameters;
71status = sane_get_parameters(handle, &parameters);
72if (status != SANE_STATUS_GOOD) {
73    fprintf(stderr, "Failed to get scan parameters: %s\n", sane_strstatus(status));
74    return 1;
75}
76
77// Start scanning
78SANE_Image image;
79status = sane_start(handle);
80if (status != SANE_STATUS_GOOD) {
81    fprintf(stderr, "Failed to start scanning: %s\n", sane_strstatus(status));
82    return 1;
83}
84
85// Read scan data
86do {
87    status = sane_read(handle, &image);
88    if (status != SANE_STATUS_GOOD) {
89        fprintf(stderr, "Failed to read scan data: %s\n", sane_strstatus(status));
90        break;
91    }
92
93} while (status == SANE_STATUS_GOOD);
94
95// Finish scanning
96status = sane_cancel(handle);
97if (status != SANE_STATUS_GOOD) {
98    fprintf(stderr, "Failed to cancel scanning: %s\n", sane_strstatus(status));
99    return 1;
100}
101
102// Close the scanner device
103status = sane_close(handle);
104if (status != SANE_STATUS_GOOD) {
105    fprintf(stderr, "Failed to close scanner: %s\n", sane_strstatus(status));
106    return 1;
107}
108
109// Exit SANE
110sane_exit();
111```
112
113### 相关仓
114[print_print_fwk](https://gitee.com/openharmony/print_print_fwk)
115
116### 参与贡献
117[如何贡献](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/contribute/参与贡献.md)
118
119[Commit message规范](https://gitee.com/openharmony/device_qemu/wikis/Commit%20message%E8%A7%84%E8%8C%83)
120
121