水平翻转字符并使用java打印

时间:2012-01-30 19:05:38

标签: java character flip mirror

我要做的是从键盘接收一个字符,例如'a'并将该字母水平翻转并打印出来。我到处搜索翻转图像,但似乎没有任何方法可以做到这一点。谁能帮我?我正在尝试用Java btw做这个。 非常感谢,如果您需要更多详细信息,请在评论部分询问我。

P.S。我无法向您显示所需的输出,因为我无法在线找到任何翻转的字符。 这个概念与图像水平翻转相同,但我想用字符来做这个。

3 个答案:

答案 0 :(得分:4)

您可以尝试创建BufferedImage,获取Graphics2D并将其AffineTransform设置为AffineTransform.scale(-1, 1),然后使用Graphics2D&#39 ; s drawString方法。你无法将它打印到控制台 - 我根本不会想到你建议的是什么,打印到控制台 - 但这种技术会产生一个图像对你而言。

答案 1 :(得分:1)

使用图像实现;不确定是否有办法翻转角色本身。

import java.io.*;

public class RotateAndFlip {


    static JPEGImage rotate90(JPEGImage inputImage) {
    JPEGImage outputImage = new JPEGImage(inputImage.getHeight(),
                          inputImage.getWidth());

    // Code to make outputImage into an image that is a 
    // 90 degree rotation of inputImage

    return outputImage;
    }
    static JPEGImage rotate180(JPEGImage inputImage) {
    return rotate90(rotate90(inputImage));
    }

    static JPEGImage rotate270(JPEGImage inputImage) {
    return rotate90(rotate90(rotate90(inputImage)));
    }

    static JPEGImage flipHorizontal(JPEGImage inputImage) {
    JPEGImage outputImage = new JPEGImage(inputImage.getWidth(),
                          inputImage.getHeight());

    // Code to make outputImage into an image that is a 
    // horizontal flip of inputImage

    return outputImage;
    }

    static JPEGImage flipVertical(JPEGImage inputImage) {
    return rotate90(flipHorizontal(rotate270(inputImage)));
    }

    public static void main (String args[]) {
    /* Check that the user has provided the right number of arguments */
    if (args.length != 1) {
        System.out.println("Usage: java JPEGCopy <source JPEG file> " + 
                   "<target JPEG file>");
        System.exit(1);
    }

    /* Create an empty image. We will read an image from a file into
       this object */
    JPEGImage imageOne = new JPEGImage();

    /* Try to open the file. This may cause an exception if the name 
       given is not a valid JPEG file so we need to catch the exceptions */
    try {
        imageOne.read(args[0]);
    } catch (Exception e) {
        /* An exception has been thrown. This is usually because the file
           either does not exist, or is not a JPEG image */
        System.out.println("Error reading file " + args[0]);
        System.out.println(e.getMessage());
        System.exit(1);
    }

    /* Make a new image to store the results in */
    JPEGImage imageTwo = new JPEGImage();


    /* Rotate by 90 degrees and write to a file */
    imageTwo = rotate90(imageOne);
    try {
        imageTwo.write("rotate90.jpg");
    } catch (Exception e) {
        System.out.println("Error writing file rotate90.jpg");
        System.out.println(e.getMessage());
        System.exit(1);
    }

    /* Rotate by 180 degrees and write to a file */
    imageTwo = rotate180(imageOne);
    try {
        imageTwo.write("rotate180.jpg");
    } catch (Exception e) {
        System.out.println("Error writing file rotate180.jpg");
        System.out.println(e.getMessage());
        System.exit(1);
    }

    /* Rotate by -90 degrees and write to a file */
    imageTwo = rotate270(imageOne);
    try {
        imageTwo.write("rotate270.jpg");
    } catch (Exception e) {
        System.out.println("Error writing file rotate270.jpg");
        System.out.println(e.getMessage());
        System.exit(1);
    }

    /* Flip horizontally and write to a file */
    imageTwo = flipHorizontal(imageOne);
    try {
        imageTwo.write("flipHorizontal.jpg");
    } catch (Exception e) {
        System.out.println("Error writing file flipHorizontal.jpg");
        System.out.println(e.getMessage());
        System.exit(1);
    }

    /* Flip vertically and write to a file */
    imageTwo = flipVertical(imageOne);
    try {
        imageTwo.write("flipVertical.jpg");
    } catch (Exception e) {
        System.out.println("Error writing file flipVertical.jpg");
        System.out.println(e.getMessage());
        System.exit(1);
    }

    }
}

此处:http://www.cs.nott.ac.uk/~smx/IVIPracticals/exercise1.html

答案 2 :(得分:0)

不确定您要完成的任务。我认为最简单的方法是获取所有字母和符号的一组图像,使用任何传统的图形软件翻转它们--PaintShopPro,PhotoShop,无论如何 - 将图像保存为一堆单独的GIF或PNG文件,然后在您需要时检索相应的文件。

如果你真的想在Java程序中进行翻转,我认为关键是:

  1. 创建BufferedImage对象

  2. 在其上调用createGraphics以获取Graphics对象。

  3. 使用drawString

  4. 将字符或字符写入此Graphics对象
  5. 然后您可以使用getRGB和setRGB操作图像。基本上你想要从顶部到中心遍历图像从上半部分到下半部分交换像素。

  6. 我想如果你想要它可以使用任何字体,多种尺寸等,你必须在一个程序中进行。

    更新

    根据您对1月30日的评论,您似乎意味着您不想自己生成反转图像,而是希望在Unicode字符集中找到反转图像。我担心,据我所知,Unicode不包含每个角色的反转图像。它包括一些本身就是符号并具有特定含义的符号。例如,Unicode在U + 2203处具有向后大写字母E,但是如果查看具有附近Unicode代码点的其他字符,您将看到它们是各种数学符号。向后E是“在那里”,因为它是一个数学符号,意思是“存在”,不是因为Unicode的发明者正在给出每个角色的镜像。

    我当然没有记住完整的Unicode代码集,所以我不能发誓那里某处没有这样的字符集,但我真的很怀疑。 Unicode的观点应该是提供一种方式来表示世界上所有的字母表和一组强大的常用符号。他们故意不包括斜体和粗体或不同大小的单独代码点,因为这些东西应该通过选择不同的字体来处理,而不是一组不同的Unicode代码点。因此,如果他们添加每个符号的镜像,那将是非常令人惊讶的。这与Unicode的哲学相悖。如果他们这样做,为什么不颠倒版本?为什么不旋转90度?等等。

    所以我认为对你的问题的简短回答是,它无法完成。没有这样的Unicode字符。