当前位置: 首页 > 知识库问答 >
问题:

如何水平翻转图像

邓德惠
2023-03-14

HiI想知道如何水平翻转和成像,对于一个practce任务,我得到了一个读取图像的代码,将其反转为指示亮度从0到5的图像,我必须翻转图像。

    public int[][] readImage(String url) throws IOException
{
    // fetch the image
    BufferedImage img = ImageIO.read(new URL(url));

    // create the array to match the dimensions of the image
    int width = img.getWidth();
    int height = img.getHeight();
    int[][] imageArray = new int[width][height];

    // convert the pixels of the image into brightness values
    for (int x = 0; x < width; x++)
    {
        for (int y = 0; y < height; y++)
        {
            // get the pixel at (x,y) 

            int rgb = img.getRGB(x,y);
            Color c = new Color(rgb);
            int red = c.getRed();
            int green = c.getGreen();
            int blue = c.getBlue();

            // convert to greyscale
            float[] hsb = Color.RGBtoHSB(red, green, blue, null);                
            int brightness = (int)Math.round(hsb[2] * (PIXEL_CHARS.length - 1));

            imageArray[x][y] = brightness;
        }
    }
    return imageArray;
}

public void draw() throws IOException
{
    int[][] array = readImage("http://sfpl.org/images/graphics/chicklets/google-small.png");
    for(int i=0; i<array.length; i++)
    {
        for(int pic=0; pic<array[i].length; pic++)
        {
            if(array[pic][i] == 0)
            {
                System.out.print("X");
            }
            else if(array[pic][i] == 1)
            {
                System.out.print("8");
            }

            else if(array[pic][i] == 2)
            {
                System.out.print("0");
            }       

            else if(array[pic][i] == 3)
            {
                System.out.print(":");
            }

            else if(array[pic][i] == 4)
            {
                System.out.print(".");
            }

            else if (array[pic][i] == 5)
            {
                System.out.print(" ");
            }

            else 
            {
                System.out.print("error");
                break;
            }   

        }
        System.out.println();
    }
}    
void mirrorUpDown()
{
    int[][] array = readImage("http://sfpl.org/images/graphics/chicklets/google-small.png");
    int i = 0;

    for (int x = 0; x < array.length; x++)
    {
        for (int y = 0; y < array[i].length; y++)
        {{
                int temp = array[x][y]; 
                array[x][y]= array[-x][y]; 
                array[array[i].length-x][y]=temp;
            }
        }
    }

}    

我得到一个错误

 unreported exception java.io.IException;
 must be caught or declared to be thrown

共有1个答案

段铭晨
2023-03-14

我会用这种方式...

    BufferedImage flip(BufferedImage sprite){
        BufferedImage img = new BufferedImage(sprite.getWidth(),sprite.getHeight(),BufferedImage.TYPE_INT_ARGB);
        for(int xx = sprite.getWidth()-1;xx>0;xx--){
            for(int yy = 0;yy < sprite.getHeight();yy++){
                img.setRGB(sprite.getWidth()-xx, yy, sprite.getRGB(xx, yy));
            }
        }
    return img;
}

只是一个循环,它的x从第一个图像的末尾开始,并将其rgba值放在第二个图像的翻转位置上。干净、简单的代码:)

 类似资料:
  • 问题内容: 进行UIImage翻转的解决方案是使用Objective-C代码: 但是,imageWithCGImage在Swift中不可用!是否有使用Swift水平翻转图像的解决方案?谢谢! 问题答案: 大多数工厂方法会迅速转换为初始化程序。只要有可用,即使class方法仍然可用,它们也是首选。您可以使用: 用法如下所示:

  • 问题内容: 我试图翻转图像以显示4种方式:原始(无变化),水平翻转,垂直翻转,水平+垂直翻转。 为了做到这一点,我在下面做,除了水平+垂直翻转之外,它还可以正常工作,你知道为什么它不起作用吗? 问题答案: 尝试这个: 以前没有用,因为您在CSS中覆盖了。因此,它没有执行全部操作,而是执行了最后一个操作。有点像如果您执行两次,它将覆盖第一个。

  • 本文向大家介绍Java实现图片旋转、指定图像大小和水平翻转,包括了Java实现图片旋转、指定图像大小和水平翻转的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java实现图片旋转、指定图像大小、水平翻转,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 如何翻转屏幕截图图像?我在其他任何地方都找不到我的问题。 示例代码: 基本上,该代码可用于捕获屏幕并以“ png”格式存储。 但它输出的水平翻转图像,因为glReadPixels();,从读左下到右上。 那么,如何在我之前水平翻转图像ImageIO.write();? 谢谢你,罗斯。 问题答案: E.G. of flipping an image horizontally using

  • 我使用绘制图表。我有另一个要求,我需要显示两个图表水平。 我有什么办法可以把这两张图表做成单行吗? 编辑:实际上,我希望它像您的示例一样。为此,您使用了,但这里我使用的是。

  • 我在类似的问题中搜索过,试过几个答案都没有解决..我有显示城市名称和一些数据的水平回收器视图,问题是我在主回收器视图适配器中的每个位置放置了如下图所示的画布条形图或RV图表,为了水平滚动该图表,我将图表放在水平滚动视图中,以便在从右向左滚动该图表时查看长水平方向上的图表数据,反之亦然,但实际上它并不水平滚动,只有主回收器视图水平滚动到 当触摸它时显示城市,当触摸它滚动(冻结)时RV内的图表没有滚动