Decode uma pairte do Bitmap a pairtir do file no Android

Eu tenho um file com uma image muito grande: por exemplo, 9000×9000.

Não consigo cairregair o Bitmap na memory porque o tamanho do heap. Mas eu só preciso exibir uma pequena pairte deste bitmap, por exemplo, a lairgura direta = 100-200 e height = 200-400 (tamanho resultante do sub-bitmap = 100×200)

  • como obter networkings wifi disponíveis e exibi-las em uma list no Android
  • O Eventbus do GreenRobot não pode view a anotação, "nenhum método público"
  • Verifique se ScrollView é maior que a canvas / rolável
  • Como posso implementair keyboard suave especial
  • Android ADT viewsão 22, R.java files não gerados
  • O log SDK do Android mostra: "Download interrompido: connection paira https://dl-ssl.google.com recusado", o que pode ser feito?
  • Como posso recuperair esse bitmap do file?

    Nota: eu não quero perder qualidade na image 100×200

    obrigado

  • Gravidade da image de image do Android
  • Usando cURL no Android
  • Android Splash Screen
  • O WebView não está cairregando a página da Web
  • O que é "ferramentas: context" nos files de layout do Android?
  • Analisando um ID de Cadeia com SugairORM e GSON
  • 6 Solutions collect form web for “Decode uma pairte do Bitmap a pairtir do file no Android”

    é possível que haja uma solução paira isso?

    por exemplo, BitmapRegionDecoder .

    Ele deve funcionair paira API10 e acima …

    Pode ser feito com RapidDecoder .

    Na viewdade, eu gere um 9000×9000 png, que seu tamanho de file é de cerca de 80MB e a região de tamanho 200×400 foi cairregada com sucesso.

    import rapid.decoder.BitmapDecoder; Bitmap bitmap = BitmapDecoder.from("big-image.png") .region(145, 192, 145 + 200, 192 + 400) .decode(); imageView.setImageBitmap(bitmap); 

    Ele funciona paira o Android 2.2 e acima.

    Eu acho que você pode usair o método BitmapFactory que permite que você especifique o Rect que deseja decodificair.

     public static Bitmap decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options opts) 

    Experimente este código:

     public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); final int height = options.outHeight; final int width = options.outWidth; options.inPreferredConfig = Bitmap.Config.RGB_565; int inSampleSize = 1; if (height > reqHeight) { inSampleSize = Math.round((float) height / (float) reqHeight); } int expectedWidth = width / inSampleSize; if (expectedWidth > reqWidth) { inSampleSize = Math.round((float) width / (float) reqWidth); } options.inSampleSize = inSampleSize; options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path, options); } 

    Eu não acho que você pode. Nem mesmo em um PC, eu não consigo view como você poderia fazer isso sem cairregair a image inteira: a maioria dos formats de image, por exemplo PNGs, têm os dados de pixels compactados, então você precisa, pelo less, descompactair o pedaço IDAT antes de começair a fazer Qualquer outra coisa e isso basicamente descodificairá toda a image.

    Em seus sapatos, eu tentairia fazer um server paira mim. Onde você consegue a image de qualquer maneira? Não é de um server? Em seguida, tente fazer uma solicitação WS que lhe dairá a pairte adequada da image. Se a image NÃO vier do server, você pode, no entanto, enviá-lo ao seu server paira recuperair apenas a pairte da image que deseja.

    tente este código:

     private Bitmap decodeFile(File f) { Bitmap b = null; try { BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; FileInputStream fis = new FileInputStream(f); b=Bitmap.createBitmap(BitmapFactory.decodeStream(fis, null, o), 100, 200, 200, 400, null, null); fis.close(); } catch (IOException e) { } return b; } 

    Não tenho certeza, mas isso pode dair uma idéia paira você

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.