SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3485|回复: 0
打印 上一主题 下一主题

[Discuss] 访问系统相册

[复制链接]

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
跳转到指定楼层
楼主
发表于 2018-2-6 20:32:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2018-2-6 20:35 编辑

SDL增加了三个API。
  1. SDL_Photo* SDL_OpenPhoto(const char* dir);
  2. void* SDL_ReadPhoto(SDL_Photo* photos, const int index, const int width, const int height);
  3. int SDL_ClosePhoto(SDL_Photo* photos);
复制代码
对app,访问相册或许是要达到两个目标,一是得到缩略图报表,选择当中一个或多个文件,二是能够按相册分类当中图像。为实现第一个目标,Rose内置了photo_selector对话框。第二个目标则要等将来再实现了。

SDL_OpenPhoto中的dir参数只对Windows有效,iOS、Android忽略这参数。

iOS
使用PhotoKit。

SDL_Photo.read_get_surface填的值是true,意味着SDL_ReadPhoto返回的是按参数width、height要求尺寸的SDL_Surface。不过,这图面的像素格式是ABGR8888。

Android
SDL_Photo.read_get_surface填的值是false,意味着SDL_ReadPhoto返回的是图像文件的绝对路径。

Android没用系统额外库,就是直接搜索DCIM下的png文件。搜索方法是用ContentResolver。当前我没找到用它直接搜索特定目录方法,只能是整盘搜,这自然会加大搜索时间。

既然是整盘搜,那怎么判断搜到的图像文件是在DCIM目录下?ContentResolver搜索出一个文件名后,看它的起始字符串是否是Environment.DIRECTORY_DCIM返回的系统路径,像/storage/emulated/0/DCIM/。

搜到的文件放到一个集合,然后按创建时间降序。

参考了一个叫Android-PickPicture的开源项目。搜索参考了PickPicture.java中的readPicture(),排序来自SortPictureList.java中的SortPictureLis

Windows
SDL_Photo.read_get_surface填的值是false,意味着SDL_ReadPhoto返回的是图像文件的绝对路径。

实现它更多是为能够用Visual Studio调试和相册相关的三个API。

行为是搜索dir目录根下的*.png、*.jpg和*.jpeg。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2024-5-17 06:40 , Processed in 0.094163 second(s), 20 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表