How to convert image to tattoo?

I’m working with the tattoolater application in that I need to convert the image (which is taken from the camera or selected from the gallery) into a tattoo ...

my requirement is like the following

enter image description here I found code sample from github https://github.com/DrewDahlman/ImageFilter/tree/master/Android/project

to filter the image.

I do not know if this is the right process to convert the image into a tattoo or not.

If someone knows this tattoo in android, please offer me a lot of googled.

Thanks in advance.

+4
source share
2 answers

you need a difference filter:

1) you calculate the horizontal difference (here you will have vertical segments)

2) you calculate the vertical difference (here, the horizontal segments)

3) you OR two cards, finding the contours

4) recreate the Bitmap object if you want to do this

something like (EDITED):

 int[] pixels; int width = yourbitmap.getWidth(); int height = yourbitmap.getHeight(); yourbitmap.getPixels(pixels, 0, width, 0, 0, width, height); // transform grayscale int[] image = new int[width*height]; for (int y=0; y<height; y++) for (int x=0; x<width; x++) { int pixel = image[y*width + x]; image[y*width + x] = (Color.red(pixel) + Color.green(pixel) + Color.blue(pixel))/3; } // calculate diff_x (vertical segments) int[] dx = new int[width*height]; for (int y=0; y<height; y++) for (int x=0; x<width; x++) dx[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width + x] - image[y*width + x-1])); // calculate diff_y (horizontal segments) int[] dy = new int[width*height]; for (int y=0; y<height; y++) for (int x=0; x<width; x++) dy[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width+x] - image[(y-1)*width+x])); // when the color intensity is higher than THRESHOLD, accept segment // you'll want a slider to change THRESHOLD values bool[] result = new bool[width*height]; const int THRESHOLD = 60; // adjust this value for (int y=0; y<height; y++) for (int x=0; x<width; x++) result[y*width + x] = (dx[y*width + x] > THRESHOLD || dy[y*width + x] > THRESHOLD); Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); for (int y=0; y<height; y++) for (int x=0; x<width; x++) result.setPixel(x, y, result[y*width+x]? Color.Black : Color.White); 
+2
source

You can use this:

  public static Bitmap ConvertToBlackAndWhite(Bitmap sampleBitmap) { ColorMatrix bwMatrix = new ColorMatrix(); bwMatrix.setSaturation(0); final ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter( bwMatrix); Bitmap rBitmap = sampleBitmap.copy(Bitmap.Config.ARGB_8888, true); Paint paint = new Paint(); paint.setColorFilter(colorFilter); Canvas myCanvas = new Canvas(rBitmap); myCanvas.drawBitmap(rBitmap, 0, 0, paint); return doBlackWhiteImage(rBitmap); } public static BlackWhiteImage doBlackWhiteImage(Bitmap myBitmap) { int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()]; myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight()); for (int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) { if (allpixels[i] == Color.BLACK) // do something else if (allpixels[i] == Color.TRANSPARENT) // do something else if (allpixels[i] == Color.WHITE) // do something else { allpixels[i] = Color.WHITE; } } myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight()); return myBitmap; } 
0
source

All Articles