2012-11-27 2 views
1

기본적으로 다음과 같은 이미지 경로가 있습니다. /mnt/sdcard/Pictures/image.jpg 그리고 가능한 가장 빠른 방법으로 미리보기 이미지의 경로를 가져와야합니다.안드로이드의 이미지 경로에서 축소판 경로를 얻는 방법은 무엇입니까?

MediaStore.Images.Thumbnails.queryMiniThumbnail을 사용하려고하지만 null 커서가 무엇이든지 상관없이 전달하려고합니다. 감사합니다.

편집 : 이것은 이미지 경로와 미리보기 경로를 모두 가져 와서 문자열에 저장하는 기능입니다. 필요한 이미지 경로 (/mnt/sdcard/Pictures/image.jpg)에 대한 축소판 경로를 반환하는 함수가 필요합니다. 감사합니다.

public String getThumbPaths(ThumbContext ctx) { 
    Uri uri = MediaStore.Images.Thumbnails.getContentUri("external"); 

    Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnails(ctx 
      .getActivity().getContentResolver(), uri, 
      MediaStore.Images.Thumbnails.MINI_KIND, null); 

    int columnIndex = cursor.getColumnIndex(Thumbnails.IMAGE_ID); 

    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

    StringBuilder stringBuilder = new StringBuilder(); 

    String id = MediaStore.Images.Media._ID + "=?"; 

    String orientation="1"; 

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { 

     String imageId = cursor.getString(columnIndex); 

     Cursor images = ctx.getActivity().managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       filePathColumn, id, 
       new String[] { imageId }, null); 

     String filePath = ""; 
     if (images != null && images.moveToFirst()) { 
      filePath = images.getString(images 
        .getColumnIndex(filePathColumn[0])); 
     } 

     ExifInterface exifReader; 
     try { 
      exifReader = new ExifInterface(filePath); 
      orientation=exifReader.getAttribute(ExifInterface.TAG_ORIENTATION); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      //e.printStackTrace(); 
     } 


     stringBuilder.append(cursor.getString(1) + ";"); 
     stringBuilder.append(filePath + ";"); 
     stringBuilder.append(orientation + ";"); 
     orientation="1"; 

    } 
    //cursor.close(); 
    return stringBuilder.toString(); 
} 
+0

일부 코드를 게시하십시오 ... – njzk2

+0

queryMini 이미 삽입 된 이미지에 사용됩니다. – njzk2

답변

-1

사용해보세요. ImageView로 설정된 이미지의 미리보기를 설정하는 데 도움이됩니다.

im=(ImageView)findViewById(R.id.imageView1); 

    byte[] imageData = null; 

    try 
    { 

    final int THUMBNAIL_SIZE = 64; 
    //InputStream is=getAssets().open("apple-android-battle.jpg"); 
    FileInputStream fis = new FileInputStream("/sdcard/apple.jpg"); 
    Bitmap imageBitmap = BitmapFactory.decodeStream(fis); 

    Float width = new Float(imageBitmap.getWidth()); 
    Float height = new Float(imageBitmap.getHeight()); 
    Float ratio = width/height; 
    imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int)(THUMBNAIL_SIZE * ratio), THUMBNAIL_SIZE, false); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    imageData = baos.toByteArray(); 
    im.setImageBitmap(imageBitmap); 
    } 
    catch(Exception ex) { 

    } 

희망이 있으면 도움이 될 것입니다.

+1

바퀴를 새롭게 개조 한 것은 무엇입니까? ThumbnailsUtils이 당신을 위해 그것을 않습니다. – njzk2

1

내가 올바르게 이해한다면 이미지는 미디어 데이터베이스에 없습니다.

ThumbnailUtils.extractTumbnail() 

사용할 수있는 비트 맵만 필요합니다.

+1

이미지가 아니라 경로가 필요합니다. 이미지와 미리보기도 있습니다. . '커서 커서 = MediaStore.Images.Thumbnails.queryMiniThumbnail (CTX \t \t \t \t .getActivity() getContentResolver(), ContentUris.parseId (Uri.parse ("파일 : //"+ "/ MNT/SDCARD/사진 /image.jpg ")), \t \t \t \t MediaStore.Images.Thumbnails.MINI_KIND, null) ' – Fossor

+0

예상 URI는 미디어 콘텐츠 제공 업체의 것입니다. 미디어 콘텐츠 제공 업체에 귀하의 이미지가 없을 가능성이 있습니다. 그렇다면 ID를 찾아야합니다. – njzk2

+0

감사합니다. 주어진 이미지 경로에서 ID를 찾는 방법에 대한 힌트를 줄 수 있습니까? – Fossor

관련 문제