gpt4 book ai didi

java - 在Android中获取Bitmap的所有像素

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:20 25 4
gpt4 key购买 nike

我想获得我所拥有的位图的像素列表。

我让位图显示在屏幕上,但出于某种原因,每次我尝试获取像素列表时,数组始终为 0。

我不知道为什么。几天来我一直在寻找并尝试不同的答案。数组的长度在那里,它不为空。所以我不确定为什么这不起作用。

  @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 中的输出可能太多,可以删除早期的输出。

关于java - 在Android中获取Bitmap的所有像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44592949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com