@ trashgod
Спасибо за ваш ответ, я немного изменил его, чтобы достичь того, что искал;)
Теперь вы можете легко изменить ширину, чтобы лучше рассмотреть изображение и подогнать его по размеру, а число не повторяется, облегчая восприятие рисунков (если они есть).О, и я добавил около 2 ~ 3 строк в конце, чтобы уточнить это.
альтернативный текст http://i42.tinypic.com/4fu91c.png
package edu.pi;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class PiRaster extends JPanel
{
private static final long serialVersionUID = -1298205187260747210L;
private static int W;
private static int H;
private static List<Integer> pi = new ArrayList<Integer>();
BufferedImage image;
private int[] clut = {
0x000000, 0x787878, 0x008B00, 0x00008B, 0x008B8B,
0x008B00, 0xCDCD00, 0xFF4500, 0x8B0000, 0xFF0000
};
public PiRaster()
{
String s = "3."
+ "14159265358979323846264338327950288419716939937510"
+ "58209749445923078164062862089986280348253421170679"
+ "82148086513282306647093844609550582231725359408128"
+ "48111745028410270193852110555964462294895493038196"
+ "44288109756659334461284756482337867831652712019091"
+ "45648566923460348610454326648213393607260249141273"
+ "72458700660631558817488152092096282925409171536436"
+ "78925903600113305305488204665213841469519415116094"
+ "33057270365759591953092186117381932611793105118548"
+ "07446237996274956735188575272489122793818301194912"
+ "98336733624406566430860213949463952247371907021798"
+ "60943702770539217176293176752384674818467669405132"
+ "00056812714526356082778577134275778960917363717872"
+ "14684409012249534301465495853710507922796892589235"
+ "42019956112129021960864034418159813629774771309960"
+ "51870721134999999837297804995105973173281609631859"
+ "50244594553469083026425223082533446850352619311881"
+ "71010003137838752886587533208381420617177669147303"
+ "59825349042875546873115956286388235378759375195778"
+ "18577805321712268066130019278766111959092164201989";
char temp;
for (int i = 0; i < s.length(); i++)
{
temp = s.charAt(i);
if (temp >= 48 && temp <= 57)
pi.add(s.charAt(i) - '0');
}
W = 50;
H = s.length() / W + 3;
this.setPreferredSize(new Dimension(W * 10, H * 10));
}
@Override
public void paintComponent(Graphics g)
{
if (image == null)
{
image = (BufferedImage) createImage(W, H);
int i = 0;
boolean end = false;
for (int row = 0; row < H && !end; row++)
{
for (int col = 0; col < W && !end; col++)
{
image.setRGB(col, row, clut[pi.get(i)]);
if (++i == pi.size())
{
i = 0;
end = true;
}
}
}
}
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame("Pi raster");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new PiRaster());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}