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, ¶meters); 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