обработка изображений: изображение в Ascii изображения на Android - PullRequest
0 голосов
/ 12 января 2012

Я прочитал http://www.switchonthecode.com/neat-software/image-to-ascii-iphone-app, мы можем изменить размер букв, изменить цвет с оттенков серого на черно-белый. И есть несколько хороших бесплатных сайтов по конвертации изображений в ASCII-арт, таких как этот : ASCII-art.org

Как работает такой алгоритм преобразования изображений? Я хочу сделать эффект в Android, но у меня есть какие-либо подсказки, некоторые советы, любые ссылки и математический метод.

редактировать: я изменяю код как:

public class TestAsciiBitmapActivity extends Activity {

private static  String BLACK = "@";
private static String CHARCOAL = "#";
private static String DARKGRAY = "8";
private static String MEDIUMGRAY = "&";
private static String MEDIUM = "o";
private static String GRAY = ":";
private static String SLATEGRAY = "*";
private static  String LIGHTGRAY = ".";
private static String WHITE = " ";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final TextView tv=(TextView) findViewById(R.id.tv);
    Button bu=(Button) findViewById(R.id.bu);
    Drawable dw = getResources().getDrawable(R.drawable.a2);
    final Bitmap bitmap = ((BitmapDrawable) dw).getBitmap();

    bu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            tv.setText(GrayscaleImageToASCII(bitmap));
        }
    });
}

public static String GrayscaleImageToASCII(Bitmap bmp)
{
    StringBuilder html = new StringBuilder();


    try
    {
        // Create a bitmap from the image



        // The text will be enclosed in a paragraph tag with the class

        // ascii_art so that we can apply CSS styles to it.

       // html.append("<br/&rt;");

        // Loop through each pixel in the bitmap

        for (int y = 0; y < bmp.getHeight(); y++)
        {
            for (int x = 0; x < bmp.getWidth(); x++)
            {
                // Get the color of the current pixel

               int c = bmp.getPixel(x, y);

                // To convert to grayscale, the easiest method is to add

                // the R+G+B colors and divide by three to get the gray

                // scaled color.



              int  r = Color.red(c);
              int g = Color.green(c);
              int b = Color.blue(c);


                // Get the R(ed) value from the grayscale color,

                // parse to an int. Will be between 0-255.

                int  rValue = (r + g + b) / 3;

                // Append the "color" using various darknesses of ASCII

                // character.

                html.append(getGrayShade(rValue));

                // If we're at the width, insert a line break

               // if (x == bmp.getWidth() - 1)
                //    html.append("&lt;br/&rt");
            }
        }

        // Close the paragraph tag, and return the html string.

     //   html.append("&lt;/p&rt;");

        return html.toString();
    }
    catch (Exception exc)
    {
        return exc.toString();
    }
    finally
    {
        bmp.recycle();
    }
}

private static  String getGrayShade(int redValue)
{
    String asciival = " ";

    if (redValue >= 230)
    {
        asciival = WHITE;
    }
    else if (redValue >= 200)
    {
        asciival = LIGHTGRAY;
    }
    else if (redValue >= 180)
    {
        asciival = SLATEGRAY;
    }
    else if (redValue >= 160)
    {
        asciival = GRAY;
    }
    else if (redValue >= 130)
    {
        asciival = MEDIUM;
    }
    else if (redValue >= 100)
    {
        asciival = MEDIUMGRAY;
    }
    else if (redValue >= 70)
    {
        asciival = DARKGRAY;
    }
    else if (redValue >= 50)
    {
        asciival = CHARCOAL;
    }
    else
    {
        asciival = BLACK;
    }

    return asciival;
}

}

приложение запущено, но строковый эффект не совпадает с изображением, что я могу изменить еще раз?

редактировать два: код правильный, эффект не очень хороший, потому что: на экране мобильного телефона все в порядке, если я могу вывести печать в текстовый файл, все круто. поэтому мой другой вопрос: если я могу преобразовать TXT-файл в растровое изображение, чтобы я мог масштабировать его, чтобы люди могли читать его с помощью телефона? спасибо

1 Ответ

1 голос
/ 12 января 2012

Несколько лет назад возник вопрос с похожим вопросом: Как работают алгоритмы преобразования художественных изображений ASCII?

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...