gpt4 book ai didi

android - Activity 返回图像

转载 作者:行者123 更新时间:2023-12-02 11:00:54 25 4
gpt4 key购买 nike

我想在我的 Activity 中返回一个位图,以便其他应用程序可以使用它。

返回文本很清晰。

Intent data = new Intent();
data.putExtra("text1", "text.");
data.putExtra("text2", "longer text.");
setResult(RESULT_OK, data);

但是如何返回位图呢?

更多信息:该 Activity 有几个目的,可供所有想要获取图像的人使用。

<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>

编辑:这是一个函数的解决方案:

public void finish(Bitmap bitmap) {
try {
File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/");
if(!folder.exists()) {
folder.mkdirs();
}
File nomediaFile = new File(folder, ".nomedia");
if(!nomediaFile.exists()) {
nomediaFile.createNewFile();
}

FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");

if(bitmapFile.exists()) {
Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile));
setResult(RESULT_OK, localIntent);
} else {
setResult(RESULT_CANCELED);
}
super.finish();

} catch (Exception e) {
e.printStackTrace();
Log.d("beewhale", "Error writing data");
}
}

最佳答案

虽然我同意 Ovidiu Latcu 的观点,但您可能会遇到内存问题。

最好将位图存储到 SD 卡上的临时位置。然后从那里访问它。 (将位图写入和读取到文件)。

或者,如果您确实想将字节数组作为额外内容,请先将位图压缩为另一种格式,例如Jpeg 或类似的,这将再次减少内存问题的变化。

一个简单的 800 万像素图像,大小为 32MB(4 层)。这超出了大多数(如果不是全部)手机上应用程序允许的内存使用量。

内置相机应用程序通过直接存储到存储来避免此问题。

这是我处理它的代码:

public void showCameraScreen(View view) {
// BUILT IN CAMERA
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this)) );
this.startActivityForResult(camera, 1);

}

private File getTempFile(Context context) {
// it will return /sdcard/MyImage.tmp
final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName());
if (!path.exists()) {
path.mkdir();
}
return new File(path, "MyImage.tmp");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK) {
final File file = getTempFile(this);

byte[] _data = new byte[(int) file.length()];
try {
InputStream in = new FileInputStream(file);
in.read(_data);
in.close();
in = null;
//DO WHAT YOU WANT WITH _data. The byte array of your image.
} catch (Exception E) {

}
}
}

注意:您还需要在调用的 Intent 上编写代码,将其存储到传递的 Uri - 这里,内置相机 api 会执行此操作。

关于android - Activity 返回图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com