スクリーン ショットを取得して png を出力する Java コードがいくつかあります。これは、電話の「写真」ギャラリーに保存するためのものです。次のようになります。
package org.apache.cordova;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import android.graphics.Bitmap;
import android.os.Environment;
import android.view.View;
public class Screenshot extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
// starting on ICS, some WebView methods
// can only be called on UI threads
final Plugin that = this;
final String id = callbackId;
super.cordova.getActivity().runOnUiThread(new Runnable() {
//@Override
public void run() {
View view = webView.getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
try {
File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!folder.exists()) {
folder.mkdirs();
}
File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");
System.out.println(folder);
System.out.println("screenshot_" + System.currentTimeMillis() + ".png");
FileOutputStream fos = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
that.success(new PluginResult(PluginResult.Status.OK), id);
System.out.println("get here?");
} catch (IOException e) {
that.success(new PluginResult(PluginResult.Status.IO_EXCEPTION, e.getMessage()), id);
System.out.println("and here?");
}
}
});
PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
result.setKeepCallback(true);
return result;
}
}
現在取り組んでいるプロジェクトのために、t をギャラリーに保存せずに、操作可能な base64 文字列を出力したいと考えています。私はJavaが初めてですが、いくつかのものを見た後、base64 Javaエンコーダーに出くわしました。しかし、Base64OutputStream という android util メソッドがあるようです。
置き換える必要があると思われるコードは次のとおりです。
FileOutputStream fos = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
最初に私は試しました:
Base64OutputStream os = new Base64OutputStream();
しかし、エラーが発生したため、見つけた他のコードをいじっていました。そのような:
ByteArrayOutputStream os = new ByteArrayOutputStream();
OutputStream b64 = new Base64.OutputStream(os);
ImageIO.write(bi, "png", b64);
String result = os.toString("UTF-8");
私のプロジェクトの小さなセクションにbase64エンコーディングライブラリを実装する代わりに、再びうまくいきませんでした。私はJavaが初めてですが、Androidが提供するBase64OutputStreamが鍵でなければならないと感じています。誰にも指針がありますか?