恢复用户图像后,如何将其保存在 Drawable 中

Posted

技术标签:

【中文标题】恢复用户图像后,如何将其保存在 Drawable 中【英文标题】:Once you have recovered an image of the user how to save it in Drawable 【发布时间】:2019-01-24 18:00:06 【问题描述】:

一旦你恢复了用户的图像,如何将它保存在应用程序中的drawable中? 用于其他活动。

从用户的图库中检索图像并将其放入 ImageView 中:

public class Profil extends AppCompatActivity 

private Button btnImport;
public ImageView selectedImg;
static final int RESULT_LOAD_IMG = 1;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.profil);

    ImageView btn_supervisor = findViewById(R.id.btn_supervisor);
    ImageView btn_add = findViewById(R.id.btn_add);
    ImageView btn_profile = findViewById(R.id.btn_profile);

    btnImport = findViewById(R.id.modifie_button);
    selectedImg = findViewById(R.id.modifie_image);


    btnImport.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
            photoPickerIntent.setType("image/*");
            startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG);
        
    );

@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) 
    super.onActivityResult(reqCode, resultCode, data);



    if (resultCode == RESULT_OK) 
        try 
            final Uri imageUri = data.getData();
            final InputStream imageStream = getContentResolver().openInputStream(imageUri);
            final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
            selectedImg.setImageBitmap(selectedImage);
         catch (FileNotFoundException e) 
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "Une erreur s'est produite",Toast.LENGTH_LONG).show();

        

    else 
        Toast.makeText(getApplicationContext(),"Vous n'avez pas choisi d'image", Toast.LENGTH_LONG).show();

    

提前谢谢你。

【问题讨论】:

什么意思??(请多解释),我想你不能这样,你可以把它保存在本地或服务器。 是的,如何创建将存储在我的数据库中的图像变量? 【参考方案1】:

您不应该保存图像可绘制/位图以在其他活动中使用。相反,您可以将图像文件的 Uri 保存在应用程序类中的某个变量或某些静态属性持有者中,然后可以跨所有活动从该 Uri 获取位图。

【讨论】:

好吧,怎么做?请 如何创建将存储在我的数据库中的图像变量? 您没有在数据库中保存变量。您将 Uri 表示的路径保存为数据库中的文本。如果您使用过 SharedPrefs,请尝试将其保存在 SharedPrefs 中。 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); prefs.edit().putString("imageUri", uri.getPath()).apply(); 然后您可以使用 -SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); String imagePath = prefs.getString("imageUri"); Uri imageUri = Uri.parse(imagePath); 获取此 uri 为此,您需要在 Sqlite 数据库中创建一个表并为所有 uris 插入条目。如果想了解如何使用 sqlite db,可以参考developer.android.com/training/data-storage/sqlite。【参考方案2】:

你可以使用 BitmapDrawable 来实现这个

//将位图转换为drawable。

Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);

【讨论】:

【参考方案3】:

您可以将位图转换为字节数组并保存在领域数据库中。

像这样:

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

注意:Realm 支持以下字段类型:boolean、byte、short、ìnt、long、float、double、String、Date 和 byte[]

您也可以使用this 在android 中进行领域配置。

您可以通过以下方式将 imageview 转换为 bitmap

imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();

【讨论】:

以上是关于恢复用户图像后,如何将其保存在 Drawable 中的主要内容,如果未能解决你的问题,请参考以下文章

如何在文件管理器中保存多个图像

地址簿以编程方式保存联系人图像

如何将数据保存到sqlite当没有网络并在flutter中恢复网络连接后发送到服务器

在recycleview时间轴中为每个视图添加drawable

如何将 Android XML Drawable 保存、导出或转换为 PNG 图像文件?

从 URL 加载 Compound Drawable 中的图像