首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Android进行像素变换

问使用Android进行像素变换
EN

Stack Overflow用户
提问于 2014-03-20 21:19:37
回答 1查看 49关注 0票数 0

有没有一种方法可以通过程序代码在Android中进行像素转换,就像你在下面的图片中看到的那样?源应该是原始图片,结果应该是转换后的图片。如果有人能把它的代码发给我就太好了。

我不知道Android是否可行,也不知道我该如何编程。

谢谢你的帮忙

向汤姆致以最良好的问候

​

原始图片

​

像素变换后的图片

EN

回答 1

Stack Overflow用户

发布于 2014-03-21 16:35:27

我找到了一个解决方案...

代码语言:javascript
复制
package com.devcom_networks.graphicslibrary;


import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;

public class Pixelize {
Bitmap originalBmp;
Bitmap obscuredBmp;
Canvas obscuredCanvas ;
Paint obscuredPaint;
private final static int PIXEL_BLOCK = 120;

  public Bitmap createPixelizedBitmap(Bitmap bitmap, int pixelsize) 
    {

        if (bitmap == null)
            return null;

        // Create the bitmap that we'll output from this method
        obscuredBmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),bitmap.getConfig());

        // Create the canvas to draw on
        obscuredCanvas = new Canvas(obscuredBmp); 
        // Create the paint used to draw with
        obscuredPaint = new Paint();   
        // Create a default matrix
        Matrix obscuredMatrix = new Matrix();       
        // Draw the scaled image on the new bitmap
        obscuredCanvas.drawBitmap(bitmap, obscuredMatrix, obscuredPaint);


        pixelizeImage(obscuredBmp, obscuredCanvas, pixelsize);

        return obscuredBmp;
    }
private Bitmap pixelizeImage(Bitmap bitmap, Canvas canvas, int pixelSize) 
{

    originalBmp = bitmap;

    if (pixelSize == 0)
        pixelSize = (int)(bitmap.getWidth())/PIXEL_BLOCK;

    if (pixelSize <= 0) //1 is the smallest it can be
        pixelSize = 1;

    int px, py;

    for (int x = 0; x < originalBmp.getWidth() - 1; x+=pixelSize) {
        for (int y = 0; y < originalBmp.getHeight() - 1; y+=pixelSize) {


            px = (x/pixelSize)*pixelSize;
            py = (y/pixelSize)*pixelSize;

            try
            { 
                int pixels[] = new int[pixelSize*pixelSize];
                int newPixel = originalBmp.getPixel(px, py);
                for (int i = 0; i < pixels.length; i++)
                    pixels[i] = newPixel;

                originalBmp.setPixels(pixels, 0, pixelSize, px, py, pixelSize, pixelSize);
            }
            catch (IllegalArgumentException iae)
            {
                //something is wrong with our pixel math
                break; //stop the filter
            }
        }
    }
    return originalBmp;
}   

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22534249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档