Re: Android版:ファルダから画像読み込み【要望】 ( No.1 ) |
- 名前:管理人 日時:2018/02/25 02:47
私以外の方のご返信があったのですが、投稿された方が消してしまったようです・・・
投稿されていた内容と被りますが、まず AndroidManifest.xml の
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="26"/>
と書かれている下の行辺りに
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
を書き加えて、外部記憶領域にアクセスできるようにする必要があります
そして、投稿では
『外部記憶領域にあるファイルからは直接 LoadGraph などで読み込めないので、fopen, fread, fwrite, fclose を
使用して GetExternalDataPath で取得できるパスにファイルをコピーしてから LoadGraph などで読み込む』
とあったのですが、こちらについてはDXライブラリのプログラムを変更することで
外部記憶領域にあるファイルを直接読み込めるようにできました
よろしければその変更を行ったこちらのバージョンをお使いください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用
こちらのバージョンであれば、前述の READ_EXTERNAL_STORAGE パーミッションを追加すれば
以下のように直接内部ストレージや SDカード上のファイルを読み込むことができます
#include "DxLib.h"
int android_main( void )
{
int GrHandle ;
if( DxLib_Init() == -1)return -1;
GrHandle = LoadGraph( "/storage/emulated/0/DCIM/Camera/IMG_20180225_021540.jpg" ) ;
SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
DrawGraph( 0, 0, GrHandle, FALSE ) ;
ScreenFlip() ;
}
DxLib_End();
return 0;
}
 |
Re: Android版:ファルダから画像読み込み【要望】 ( No.2 ) |
- 名前:was-blue.0793 日時:2018/03/26 18:16
横から失礼します。
現時点でGetExternalDataPath関数しか外部ファイルのパスを読み込む関数が存在しませんが、例えば「/storage/emulated/0/」といったパスの取得や、
SDカードのパスを取得する関数を用意する予定はないのでしょうか?
READ_EXTERNAL_STORAGEパーミッションが前提となりますが、FileRead_FindFirst関数のファイル検索開始位置としてパスを取得したいので、関数の追加をご検討願います。
よろしくお願いします。
|
Re: Android版:ファルダから画像読み込み【要望】 ( No.3 ) |
- 名前:管理人 日時:2018/03/26 23:35
特に予定はありませんでしたが、少し調べた限りでは Android 4.2 以降限定の機能として実装できそうです
実装は次の週末になってしまうかもしれません
少々お時間をください m(_ _)m
|
Re: Android版:ファルダから画像読み込み【要望】 ( No.4 ) |
- 名前:管理人 日時:2018/04/03 00:02
お待たせしました、使用できる外部ファイルのパスを取得できる機能を追加しました
よろしければこちらのバージョンをダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用
機能は追加しましたが、少しだけ was-blue.0793さんのご要望通りにはなっていません・・・
以下の関数を追加しました
// ソフトの外部データ保存用のディレクトリパスの数を取得する
int GetExternalDataPathNum( void ) ;
そして GetExternalDataPath に引数を二つ追加して以下のようになりました
// ソフトの外部データ保存用のディレクトリパスを取得する
// PathBuffer : パスを保存するバッファ
// PathBufferBytes : パスを保存するバッファのサイズ( 単位:バイト )
// PathIndex : 外部データ保存用のディレクトリパスの番号( 複数個ある場合があるので )
// IsRemovableFlag : PathIndex で指定したパスが取り外し可能なデバイスかどうかを保存する int型変数のアドレス
// ( 格納された値 TRUE:取り外し可能( SDカード等 ) FALSE:取り外し不可能( 内蔵ストレージ等 ) )
int GetExternalDataPath( char *PathBuffer, int PathBufferBytes, int PathIndex = 0, int *IsRemovableFlag = NULL ) ;
使い方としては、最初に GetExternalDataPathNum で外部データ保存用のディレクトリパスの数を取得して、
GetExternalDataPath の第3引数の PathIndex で取得したい外部データ保存用ディレクトリパスの番号を指定する感じです
( PathIndex が 0 の場合は今までの GetExternalDataPath で取得できたパス( 内蔵ストレージ内のパス )となります )
SDカードを挿しているスマホの場合は基本的に GetExternalDataPathNum の戻り値は 2 となり、GetExternalDataPath の
PathIndex に 1 を指定して取得できるパスは
/storage/3136-6231/Android/data/com.DxLibTest_Android/files
のような文字列となり、こちらが SDカードでの外部データ保存用のディレクトリパスとなります
お気付きと思いますが、今回の機能追加は『/storage/emulated/0/』や『/storage/3136-6231/』のような
各外部保存用のデバイスのルートディレクトリのパスを取得する機能の追加ではなく、純粋に GetExternalDataPath の
機能を強化するものとなっています
お手数で申し訳ありませんが、『/storage/emulated/0/』や『/storage/3136-6231/』のような各外部保存用のデバイスの
ルートディレクトリのパスは GetExternalDataPath で得られるパスの文字列を加工して得るようにしてください m(_ _;m
あと、SDカードかどうかはパスの形態から判断できますが、それ以外の判断方法として第4引数の IsRemovableFlag に
int型の変数のアドレスを渡すと、SDカードのように取り外しが可能なデバイスの場合には TRUE が、内蔵ストレージのように
取り外しができないデバイスの場合は FALSE がアドレスを渡した変数に代入されるので、こちらが TRUE かどうかで
SDカードかどうかを判断することができます
よろしければお試しください m(_ _)m
 |
Re: Android版:ファルダから画像読み込み【要望】 ( No.5 ) |
- 名前:was-blue.0793 日時:2018/04/03 17:26
実装していただきありがとうございます。
ルートディレクトリの取得はGetExternalDataPathで取得したパスから「Android」を検索して「Android」より後の文字列を削除することで取得できそうなのでそのように対応します。
早速その機能をアプリに実装したいのですが、テスト版を使ったアプリをGoogle Playにアップしても問題ないでしょうか?
|
Re: Android版:ファルダから画像読み込み【要望】 ( No.6 ) |
- 名前:管理人 日時:2018/04/04 00:56
> 早速その機能をアプリに実装したいのですが、テスト版を使ったアプリをGoogle Playにアップしても問題ないでしょうか?
はい、問題ありません
|