0

スクリーン ショットを取得して 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が鍵でなければならないと感じています。誰にも指針がありますか?

4

3 に答える 3

0

Androidにタグを付けたようです。org.kobjects.base64パッケージ(ksoap2-android-assembly-2.4-jar-with-dependencies.jarにあります)をインポートできる場合は、そこからいくつかのユーティリティを使用できます。PNG画像のバイト配列を使用すると、次のことを行うだけで済みます。

String pngAsBase64String = Base64.encode(/*PNG byte array*/);

これらのユーティリティは、SunのBase64エンコーダーおよびデコーダーよりも使いやすいと思います

于 2012-09-18T08:42:06.260 に答える
0

画像のエンコードは非常に簡単です。

エンコード ソース:

  Bitmap bm = BitmapFactory.decodeFile(picturePath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] byteArray = baos.toByteArray();

            encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);

    ImageView imageView = (ImageView) findViewById(R.id.imageView1);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

デコード元:

byte[] decodedString;
        decodedString = Base64.decode(picture, Base64.DEFAULT);

        imageView1.setImageBitmap( BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length));
于 2012-09-18T08:38:28.373 に答える
0

このコードを試してみてください...

        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        base64String = Base64.encodeToString(b, Base64.DEFAULT);
于 2012-09-18T08:48:59.120 に答える