簡體   English   中英

在Android中獲取位圖的所有像素

[英]Getting all pixels of Bitmap in Android

我想獲得我所擁有的位圖的像素列表。

我將位圖顯示在屏幕上,但是由於某種原因,每次嘗試獲取像素列表時,數組始終為0。

我不知道為什么。 我一直在搜索並嘗試不同的答案已有幾天了。 數組的長度在那里,並且不為null。 所以我不確定為什么這行不通。

  @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    line = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.line);
    sun = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.circle);

    line = Bitmap.createBitmap(line, 0, 0, line.getWidth(), line.getHeight());



    canvas.drawBitmap(line, 0, 0, null);
    canvas.drawBitmap(sun, 0,0, null);


    Log.d("BITMAP","WIDTH:"+line.getWidth()+" HEIGHT:"+line.getHeight());


    pixelAmount = new int[line.getHeight()*line.getRowBytes()];

    line.getPixels(pixelAmount,0,line.getWidth(),0,0,line.getWidth()-1,line.getHeight()-1);

    Log.d("Line", "Pixel: " + pixelAmount.length + " Index" + 0);
    Log.d("Line", "Pixel: " + pixelAmount[10] + " Index" + 0);
    Log.d("Line", "Pixel: " + pixelAmount[100] + " Index" + 0);
    Log.d("Line", "Pixel: " + pixelAmount[56] + " Index" + 0);
    Log.d("Line", "Pixel: " + pixelAmount[76] + " Index" + 0);


    }
}

我猜這是因為您使用了錯誤的方法。 通過做:

line = Bitmap.createBitmap(line.getWidth(), line.getHeight(), Bitmap.Config.ARGB_8888);

您只需創建一個新的空位圖。 但是您必須提供源位圖,例如這種方法:

line = createBitmap(line, 0, 0, line.getWidth(), line.getHeight());

同樣,您應該確保使用方法decodeFromResource()創建了位圖。 只需放置一個檢查寬度和高度的日志,如下所示:

Log.d("BITMAP","WIDTH:"+line.getWidth()+" HEIGHT:"+line.getHeight);

如果有寬度和高度,則說明創建成功。

編輯

您的下一個問題在這里:

pixelAmount = new int[line.getHeight()*line.getRowBytes()];

一定是:

pixelAmount = new int[line.getHeight()*line.getWidth()];

並檢查它像:

for(int i=0;i<pixelAmount.length;i++){

int pixel = pixelAmount[i];
if(pixel!=0){
Log.d("BITMAP","PIXELS:"+pixel[i]);
}

}

如果尺寸太大,則Android Monitor中的輸出可能會過多,並且可以刪除早期的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM