Отразить персонаж по горизонтали и распечатать его с помощью Java - PullRequest
0 голосов
/ 30 января 2012

То, что я пытаюсь сделать, это получить символ с клавиатуры, например «а», перевернуть эту букву горизонтально и распечатать ее.Я везде искал перевернутые изображения, но, похоже, не существует никакого способа сделать это.Может кто-нибудь мне помочь?Я пытаюсь сделать это на Java, кстати.Большое спасибо заранее, если вам нужно больше деталей, спросите меня в разделе комментариев.

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

Ответы [ 3 ]

4 голосов
/ 30 января 2012

Вы можете попробовать что-то вроде создания BufferedImage, получения его Graphics2D и установки его AffineTransform на AffineTransform.scale(-1, 1), а затем с помощью метода Graphics2D s drawString. Вы не сможете распечатать это на консоли - я не думаю, что вы предлагаете вообще возможно, печатать на консоли - но эта техника создаст изображение для вас.

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

Реализация с использованием изображений;не уверен, есть ли способ перевернуть самих персонажей.

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

0 голосов
/ 30 января 2012

Не уверен, что вы пытаетесь достичь.Я думаю, что самый простой способ сделать это - получить набор изображений со всеми буквами и символами, использовать их для переворота с помощью любого обычного графического программного обеспечения - PaintShopPro, PhotoShop и т. Д. - сохранить изображения в виде набора отдельных GIF илиPNG-файлы, а затем извлеките соответствующий файл, когда он вам понадобится.

Если вы действительно хотите выполнить переключение в программе Java, я думаю, ключом является:

  1. Создание объекта BufferedImage

  2. Вызовите на нем createGraphics, чтобы получить объект Graphics.

  3. Запись символа или символов в этот объект Graphics с помощьюdrawString

  4. Затем вы можете манипулировать изображением так, как хотите, используя getRGB и setRGB.По сути, вы хотели бы перемещаться по изображению сверху вниз, меняя пиксели от верхней половины к нижней половине.

Я думаю, если вы хотите, чтобы оно работало с любым шрифтом, во многихразмеры и т. д., вы должны будете сделать это в программе.

Обновление

На основании вашего комментария от 30 января, кажется, что вы имеете в виду, что вы неВы не хотите создавать перевернутое изображение самостоятельно, а наоборот, вы хотите найти перевернутое изображение среди набора символов Unicode.Боюсь, что, насколько мне известно, Unicode не включает в себя обратное изображение каждого персонажа.Он включает в себя несколько символов, которые сами по себе являются символами и имеют определенные значения.Например, Unicode имеет заглавную букву E в U + 2203, но если вы посмотрите на другие символы с соседними кодовыми точками Unicode, вы увидите, что они являются различными математическими символами.Обратный E находится «там», потому что это математический символ, означающий «там существует», а не потому, что изобретатели Unicode дают зеркальные изображения каждого символа.

У меня определенно нет полного набора кодов Unicodeзапомнил, поэтому я не могу поклясться, что там нет такого набора символов, но я действительно в этом сомневаюсь.Смысл Unicode должен был дать способ представить все алфавиты в мире и надежный набор часто используемых символов.Они преднамеренно НЕ включали отдельные кодовые точки для таких вещей, как курсив и полужирный, или для разных размеров, потому что эти вещи должны обрабатываться путем выбора другого шрифта, а не другого набора кодовых точек Unicode.Таким образом, было бы очень удивительно, если бы они добавили зеркальное отображение каждого символа.Это противоречило бы философии Unicode.И если они это сделали, то почему не перевернутые версии?Почему бы не повернуть на 90 градусов?И т. Д. И т. Д.

Так что я думаю, что краткий ответ на ваш вопрос: это невозможно сделать.Нет таких символов Юникода.

...