gpt4 book ai didi

android - Bitmap.getPixel 只返回 0

转载 作者:行者123 更新时间:2023-11-30 03:33:20 25 4
gpt4 key购买 nike

我有以下用于创建位图的代码:

public PixelMapper(Path inputPath){
RectF src = new RectF();
inputPath.computeBounds(src, true);
int width = (int)src.width()+1;
int height = (int)src.height()+1;
largeBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);

Paint canvasPaint = new Paint();
canvasPaint.setAntiAlias(false);
canvasPaint.setColor(Color.BLACK);
canvasPaint.setStyle(Style.STROKE);
canvasPaint.setStrokeWidth(5);

Canvas canvas = new Canvas(largeBitmap);
canvas.drawPath(inputPath, canvasPaint);
bitmap = Bitmap.createScaledBitmap(largeBitmap, SIDE_OF_BITMAP, SIDE_OF_BITMAP, true);
bitmap = Bitmap.createBitmap(bitmap);//so that a immutable bitmap is created
drawPixelMap();
}

public void drawPixelMap(){
for(int x=0; x<bitmap.getWidth(); x++){
String msg="";
for(int y=0; y<bitmap.getHeight(); y++){
msg = Integer.toHexString( bitmap.getPixel(x,y) );
Log.v("bitmap", msg);
}
}
}

int[] pixels = new int[64];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, SIDE_OF_BITMAP, SIDE_OF_BITMAP);
bitmap.setPixels(pixels, 0, 8, 0, 0, 8, 8);
for ( int pixel : pixels)
Log.v("bitmap", Integer.toHexString(pixel) );

问题是所有日志消息都是“0”:getPixel 和 getPixels 都返回“0”。更糟糕的是,如果我删除行 bitmap.getPixels(...); 并保留 bitmap.setPixels(...) 行,图像仍然像以前一样绘制。似乎 bitmap 变量只是一个引用,位图并不存在,并且出于某种原因,我无法获取这些像素。我知道位图是根据需要创建的,因为我可以在 ImageView 上查看它。它也显示黑色和白色像素以及一些灰色像素。代码:

Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 128, 128, false);
imageView1.setImageBitmap(newBitmap);

SIDE_OF_BITMAP = 8,所有类(Path、Bitmap、Canvas)都是android的。

我尝试使用以下代码将位图保存到文件中:

public String saveToStorage(String fileName){
if( !storageDir.exists() )
storageDir.mkdirs();
File file = new File(storageDir, fileName + ".png");
try{
OutputStream out = new FileOutputStream(file);
boolean result = bitmap.compress(CompressFormat.PNG, 100, out);
out.close();
return Boolean.toString(result);
}
catch (FileNotFoundException e){
Log.e("save", "cannot save file", e);
return "File not found exception";
}
catch (IOException e){
Log.e("save", "IO error", e);
return "IO Exception";
}
}

但它返回“false”,即 bitmap.compress 方法返回 false。请给我任何帮助,不一定是示例代码。

最佳答案

我发现了我的错误。它位于行中

largeBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);

Bitmap.Config.ALPHA_8 只创建一个掩码。它不会创建实际像素。这就是我得到错误结果的原因。但是,当我将它设置为 ImageView 时,我得到了所需的结果,因为它的背景(默认情况下)是白色的。我通过将 Bitmap.Config.ALPHA_8 更改为 Bitmap.Config.ARGB_8888

解决了我的问题

关于android - Bitmap.getPixel 只返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17039564/

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