当前位置: 首页 > 知识库问答 >
问题:

Android为位图添加细微噪声

孙俊彦
2023-03-14

有人知道如何给灰度图像添加微妙的噪音吗?我有一个灰度图像,我想给它添加一些微妙的黑和白噪音。有人知道怎么做吗?

我目前正在使用这种方法,但这只是生成随机颜色,并用这些颜色交换现有像素。如何在位图的某些像素上添加一些细微的黑白噪声?

public static Bitmap applyFleaEffect(Bitmap source) {
// get source image size
 int width = source.getWidth();
  int height = source.getHeight();
 int[] pixels = new int[width * height];
 // get pixel array from source
 source.getPixels(pixels, 0, width, 0, 0, width, height);
 // create a random object
 Random random = new Random();

int index = 0;
// iteration through pixels
for(int y = 0; y < height; ++y) {
for(int x = 0; x < width; ++x) {
// get current index in 2D-matrix
index = y * width + x;
// get random color
int randColor = Color.rgb(random.nextInt(255),
  random.nextInt(255), random.nextInt(255));
// OR
pixels[index] |= randColor;

}}//输出位图bmOut=位图。createBitmap(width,height,source.getConfig());bmOut。设置像素(像素,0,宽度,0,0,宽度,高度);返回bmOut;}}

更新:添加完整代码以显示灰度步长和尝试的噪声步长

      //First, apply greyscale to make Image black and white
    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, mBitmap.getConfig());
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);

    //Apply noise after grayscale
    int[] pixels = new int[width * height];

    bmpGrayscale.getPixels(pixels, 0, width, 0, 0, width, height);
    // a random object
    Random random = new Random();

    int index = 0;

    // Note: Declare the c and randColor variables outside of the for loops
    int co = 0;
    int randColor = 0;
    // iteration through pixels
    for (int y = 0; y < height; ++y) {
        for (int x = 0; x < width; ++x) {
            if (random.nextInt(101) < percentNoise) {
                // Skip this iteration a certain percentage of the time
                continue;
            }
            // get current index in 2D-matrix
            index = y * width + x;


            co = random.nextInt(255);


            randColor = Color.rgb(co, co, co);
            pixels[index] |= randColor;




        }
    }
    // output bitmap
    mBitmap = Bitmap.createBitmap(width, height, bmpGrayscale.getConfig());
    mBitmap.setPixels(pixels, 0, width, 0, 0, width, height);

    c.drawBitmap(mBitmap, 0, 0, paint);
    return bmpGrayscale;
}

共有1个答案

融建树
2023-03-14

首先,randColor不太可能是代码中的灰度颜色。要生成随机的灰度颜色,请执行以下操作:

int c = random.nextInt(255);
int randColor = Color.rgb(c, c, c);

考虑到这一点,我将如何重写您的代码(注意:根据您的喜好调整percentNoise参数):

public static Bitmap applyFleaEffect(Bitmap source, int percentNoise) {
    // get source image size
    int width = source.getWidth();
    int height = source.getHeight();
    int[] pixels = new int[width * height];
    // get pixel array from source
    source.getPixels(pixels, 0, width, 0, 0, width, height);
    // create a random object
    Random random = new Random();

    int index = 0;
    // Note: Declare the c and randColor variables outside of the for loops
    int c = 0;
    int randColor = 0;
    // iterate through pixels
    for (int y = 0; y < height; ++y) {
        for (int x = 0; x < width; ++x) {
            if (random.nextInt(101) < percentNoise) {
                // Skip this iteration a certain percentage of the time
                continue;
            }
            // get current index in 2D-matrix
            index = y * width + x;
            // get random color
            c = random.nextInt(255);
            randColor = Color.rgb(c, c, c);
            pixels[index] |= randColor;
        }
    }
    Bitmap bmOut = Bitmap.createBitmap(width, height, source.getConfig());
    bmOut.setPixels(pixels, 0, width, 0, 0, width, height);
    return bmOut;
}

 类似资料:
  • 我正在写一些函数来添加位图上的噪声效果。我发现了类似的问题:在绘图中添加噪波效果 位图输出位图=位图。创建位图(bitmap.getWidth(),位图。getHeight(),位图。配置。ARGB_8888); 我应该如何添加滤色器才能得到这样的结果?你能提供一些代码吗?

  • 在新的Google Maps for Android API v2中,我可以很容易地获得自定义标记和信息窗口来显示。然而,我试图在我的信息窗口中设置多个按钮,每个按钮执行不同的操作,但问题是,map将InfoWindow视为它自己的按钮对象(无论我在哪里单击InfoWindow,它都会按下整个按钮)。有人知道如何更多地定制这个吗?

  • 我要做什么::我想使用我当前的实现为圆形图像添加一个黑色边框,如何在不使用第三方库的情况下实现这一点 全面转变。JAVA

  • 本文向大家介绍Android仿微信朋友圈点击加号添加图片功能,包括了Android仿微信朋友圈点击加号添加图片功能的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: NinePhotoView.java Measure   我们的子View三个一排,而且都是正方形,所以我们上面通过循环很好去得到所有子View的

  • 问题内容: 我想知道在带有OpenCV的Python或任何其他向图像添加高斯噪声或椒盐噪声的python图像处理库中是否存在某些函数?例如,在MATLAB中,存在直接功能可以完成相同的工作。 或者,如何使用带有OpenCV的Python向图像添加噪点? 问题答案: 该功能会在图像中添加高斯,椒盐,泊松和斑点噪声

  • 嗨,我是android的业余爱好者。我想将图像添加到我的微调器项目中。不幸的是,我不知道怎么做。下面是我的xml文件和Mainactive。感谢阅读。 XML文件 维护活动