0

Я пытаюсь получить изображение фотосферы с сервера, на котором запущен PHP. Я извлекаю изображение с помощью универсальной библиотеки загрузчика изображений. И затем, после того, как я получил растровое изображение, я сохраняю его на SD-карте, а затем на другой активности, я пытаюсь открыть изображение фотосферы, используя галерею. проблема в том, что когда я сохранил изображение, он сжимает форму 6 МБ только до 1 МБ, из-за чего галерея не может открыть изображение фотосферы. есть ли способ решить это? (Мне было интересно, если это возможно, чтобы передать изображения непосредственно в галерею или есть способ сохранить изображение несжатого)Сохранение фотосферы без несжатого хранилища

код:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
    .cacheInMemory(true).cacheOnDisk(true) 
    .build(); 

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(mContext) 
    .defaultDisplayImageOptions(defaultOptions) 
    .build(); 

    ImageLoader.getInstance().init(config); 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    imageLoader.displayImage(mHotelDetailResponseData.photosphere, mImage, defaultOptions, new ImageLoadingListener() { 
     @Override 
     public void onLoadingStarted(String imageUri, View view) { 
     } 
     @Override 
     public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
      Log.d("Test","fail : " + failReason.getCause().getMessage()); 
     } 
     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      Log.d("Test","complete"); 
      writeBitmapToMemory(loadedImage); 
      mPhotoSphereButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.d("test","can continue"); 
        Intent i = new Intent(getActivity(), PhotosphereActivity.class); 
        startActivityForResult(i,0); 
       } 
      }); 
     } 
     @Override 
     public void onLoadingCancelled(String imageUri, View view) { 
     } 
    }, new ImageLoadingProgressListener() { 
     @Override 
     public void onProgressUpdate(String imageUri, View view, int current, int total) { 

      Log.d("Test","progress:" +current+"/"+total); 
     } 
    }); 

private void writeBitmapToMemory(Bitmap bitmap) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 

    File f = new File(Environment.getExternalStorageDirectory() + File.separator + "test.jpg"); 
    try { 
     f.createNewFile(); 
     FileOutputStream fo = new FileOutputStream(f); 
     fo.write(bytes.toByteArray()); 

     fo.close(); 
     Log.d("test","written to : " + Environment.getExternalStorageDirectory() + File.separator + "test.jpg"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.d("test","error : " + e.getMessage()); 
    } 
} 

деятельность, переводящее намерение открыть его в галерея: (работает нормально, если я открываю несжатую фотосферу)

public class PhotosphereActivity extends BaseActivity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    startPanorama(); 
} 

private void startPanorama() { 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setComponent(new ComponentName("com.google.android.gms", "com.google.android.gms.panorama.PanoramaViewActivity")); 
    intent.setDataAndType(Uri.parse(Environment.getExternalStorageDirectory() + File.separator + "test.jpg"), "image/*"); 
    startActivity(intent); 
} 

ответ

0

ОК, я наконец понял это. проблема заключается в том, что когда я открываю изображение с помощью галереи, тип намерения должен быть определен конкретно, а не только «image/*»

private void storeImage(Bitmap image) { 
    File pictureFile = getOutputMediaFile(); 
    if (pictureFile == null) { 
     return; 
    } 
    try { 
     FileOutputStream fos = new FileOutputStream(pictureFile); 
     image.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     fos.close(); 
     mPhotosphereFile = pictureFile; 
    } catch (FileNotFoundException e) { 
     Log.d(TAG, "File not found: " + e.getMessage()); 
    } catch (IOException e) { 
     Log.d(TAG, "Error accessing file: " + e.getMessage()); 
    } 
} 
private File getOutputMediaFile(){ 
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory() 
      + "/Android/data/" 
      + mContext.getPackageName() 
      + "/Files"); 

    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      return null; 
     } 
    } 
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date()); 
    File mediaFile; 
    String mImageName="MI_"+ timeStamp +".png"; 
    mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName); 
    Log.d("test","written to : " + mediaStorageDir.getPath() + File.separator + mImageName); 

    return mediaFile; 
}