Я прочитал 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("<br/&rt");
}
}
// Close the paragraph tag, and return the html string.
// html.append("</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-файл в растровое изображение, чтобы я мог масштабировать его, чтобы люди могли читать его с помощью телефона? спасибо