Android сохраняет снятое изображение с камеры или галереи с помощью файловой системы - PullRequest
0 голосов
/ 07 декабря 2011

Я хочу сохранить URI изображения из камеры или галереи в SQLite. И я хочу отобразить изображение, которое называется URI из SQLite. Если я хочу сделать это, кто-то сказал, что вы должны сохранить URI изображения в SQLite как байт, и Вы можете установить изображение на imageView. Я понимаю теорию, но я все еще застреваю с моим кодированием. Если это правда, я хочу сохранить отформатированное изображение в SDCard или где-то еще. кто-то сказал, используйте BitmapFactory и decodeResource. и позвоните в Ури из R.drawable. Однако я не знаю, как сохранить изображение в папку R.drawable. Не могли бы вы помочь мне? Я дам вам немного моей кодировки. Я борюсь с сохранением изображения в SQLite и с тем, как его загрузить и как изменить его в течение двух недель!

Извините за действительно долгое кодирование. Я не знаю, где я сейчас нахожусь. Спасибо.

fridgeDetails.java

populateFields();

private void populateFields() 
{
    if (mRowId != null)
    {
        Cursor data = mDbHelper.fetchItem(mRowId);
        startManagingCursor(data);
        //load image from sqlite
        byte[] blob = data.getBlob(data.getColumnIndexOrThrow(FridgeDbAdapter.KEY_IMAGE));
        mImageView.setImageBitmap(BitmapFactory.decodeByteArray(blob, 0, blob.length));
        nameEdit.setText(data.getString(data.getColumnIndexOrThrow(FridgeDbAdapter.KEY_NAME)));
        categoryEdit.setText(data.getString(data.getColumnIndexOrThrow(FridgeDbAdapter.KEY_CATEGORY)));
        expired_Date_Btn.setText(data.getString(data.getColumnIndexOrThrow(FridgeDbAdapter.KEY_EXPIRED_DATE)));
    }
    else{
    expired_Date_Btn.setText(
            new StringBuilder()
            .append(mDay).append("/")
            //month is 0 based. Then add 1
            .append(mMonth + 1).append("/")
            .append(mYear).append(" "));    
    }

}
    //create dialog for taking image
    ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.select_dialog_item,items);
    AlertDialog.Builder builder  = new AlertDialog.Builder(this);
    builder.setTitle("Select Image");

    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) 
        {
            if(item==0)
            {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                try
                {
                    cameraIntent.putExtra("return-data", true);
                    startActivityForResult(cameraIntent, PICK_FROM_CAMERA); 
                }
                catch(ActivityNotFoundException e)
                {
                    e.printStackTrace();
                }                   
            }
            else
            {
                Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                //image chooser
                startActivityForResult(Intent.createChooser(galleryIntent, "Complete action using"), PICK_FROM_GALLERY);
            }
        }   
    });

confirmButton.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) {
            //set alarm with expiration date                
            am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            setOneTimeAlarm();
            Toast.makeText(fridgeDetails.this, "Alarm automatic set", Toast.LENGTH_SHORT).show();
            saveState();
            setResult(RESULT_OK);
            finish();
        }

    });

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
     if (resultCode != RESULT_OK) return;
       switch (requestCode)
       {
        case PICK_FROM_CAMERA:
            Bundle extras = data.getExtras();
            Bitmap selectedImage = (Bitmap) extras.get("data");
            selectedImage = Bitmap.createScaledBitmap(selectedImage, 200, 200, false);
            mImageView.setImageBitmap(selectedImage);
            break;

        case PICK_FROM_GALLERY:
            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath);
            Bitmap bt=Bitmap.createScaledBitmap(bitmap, 200, 200, false);
            mImageView.setImageBitmap(bt);
        break;
       }
}

protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    saveState();
}

@Override
protected void onPause()
{
    super.onPause();
    saveState();
}

@Override
protected void onResume()
{
    super.onResume();
    populateFields();
}

private void saveState() 
{
    String name = (String) nameEdit.getText().toString();
    String category = (String) categoryEdit.getText().toString();
    String expired_date = (String) expired_Date_Btn.getText().toString();
    byte[] image = ConvertDrawableToByteArray(mImageView.getDrawable());
    if(mRowId == null)
    {
        long id = mDbHelper.insertItem(category, name, expired_date, image);

        if(id>0)
        {
            mRowId = id;
        }           
    }
    else 
    {
        mDbHelper.updateItem(mRowId, category, name, expired_date, image);
    }   
}

public static byte[] ConvertDrawableToByteArray(Drawable drawableResource) {
    Bitmap imageBitmap = ((BitmapDrawable) drawableResource).getBitmap();
    ByteArrayOutputStream imageByteStream = new ByteArrayOutputStream();
    imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, imageByteStream);
    byte[] imageByteData = imageByteStream.toByteArray();
    return imageByteData;
}

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Расположение вашего файла изображения можно получить из data.getData () в методе OnActivityResult.Вы можете сохранить местоположение как строку в Sqlite.Затем используйте

 imageView.setImageBitmap(BitmapFactory.decodeFile(filename) 

, чтобы показать изображение.

Местоположение по умолчанию - папка вашего приложения.Если вы хотите хранить в другом месте, передайте местоположение, как в следующем формате:

// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)

Для получения дополнительной информации см. - http://developer.android.com/guide/topics/media/camera.html

0 голосов
/ 07 декабря 2011

Установите этот флажок для Получите URI захваченного изображения

Проверьте это для Вставка изображения в БД в виде BLOB и получение его обратно и отображение.

Включает в себя загрузку образа с сервера и вставку в БД, просто измените его в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...