【问题标题】:Edges in image are not smooth after setpixels in android在android中设置像素后图像中的边缘不平滑
【发布时间】:2026-01-09 08:45:01
【问题描述】:

我正在使用 getpixels() 和 setpixels() api。从 Bitmap 使用 getpixel api 逐个获取像素并进行一些修改和设置像素,对循环中的所有像素执行此操作。对于无法找到原因的所有像素,我可以看到相同的 alpha 值。 请提出解决方案。

                   int width, height;
           height = bmpOriginal.getHeight();
           width = bmpOriginal.getWidth(); 

            int[] pix = new int[width * height];
            bmpOriginal.getPixels(pix, 0, width, 0, 0, width, height);



            int R, G, B, A; 


            float[] hsv = new float[3];
            float[] hsv2 = new float[3];
            float[] hsv3 = new float[3];



            for (int y = 0; y < height; y++){
            for (int x = 0; x < width; x++)
            {
                int index = y * width + x;
                R = (pix[index] >> 16) & 0xff;     //bitwise shifting
                G = (pix[index] >> 8) & 0xff;
                B = pix[index] & 0xff;            


                Color.RGBToHSV(R, G, B, hsv);                   

                int value = tempBitmap.getPixel(x, y);


               Color.colorToHSV(value, hsv2);                           

                int x = Color.HSVToColor(hsv3);
                pix[index] = x;


                }

            }  

            bmpOriginal.setPixels(pix, 0, width, 0, 0, width, height);

【问题讨论】:

  • 你是怎么解决这个问题的?我也坚持这个。
  • 我也坚持这个。

标签: android image bitmap


【解决方案1】:

在您的绘画对象上使用setAntiAlias(true) api 来打开抗锯齿。 也可以试试setFilterBitmap(true) 上漆。

从您的位图中创建一个BitmapDrawable。然后,在使用之前致电mBmpdrawable.setAntiAlias(true);。也可以尝试拨打mBmpdrawable.setFilterBitmap(true)

【讨论】:

  • 谢谢,我现在试过了,但我仍然可以看到这个问题。请对此进行更多解释。
  • 在获取像素后和设置像素之前,我没有使用绘画对象。使用颜色 api 我正在更改颜色。那么在这种情况下如何应用 setAntiAlis() ?
  • 制作一个 bitmapdawable 并在其上设置抗锯齿。检查更新的答案
  • 我已经尝试过了,但没有任何改变。设置像素后,我从位图创建了 BitmapDrawable。 bmpOriginal.setPixels(pix, 0, width, 0, 0, width, height); Drawable d = new BitmapDrawable(getResources(), bmpOriginal); ((BitmapDrawable) d).setAntiAlias(true); ((BitmapDrawable) d).setFilterBitmap(true); bmpOriginal = ((BitmapDrawable) d).getBitmap();