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

想要将图像生成器C#代码转换为JAVA

戚勇
2023-03-14

我得到了一个用C#编写的类和它的方法,它所做的基本上是它通过x和y坐标和高度,宽度对屏幕的一部分进行截图,我想把这个C#代码转换成JAVA以便我可以在我的桌面UI自动化项目中使用,所以这是一个根据屏幕的“x”和“y”坐标获取图像的实用程序。请注意:我已经尝试过在线转换器,它生成的代码显示了库包错误

//下面是代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace myClass
{
    class ImageCapture
    {

        public static void Capture(string fileName, Point firstCoordinate, Point secondCoordinate, int enlargeImageByPercentage=0)
        {
            var tmpImg = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).Replace("Roaming", "Local") + "\\temp", Path.GetFileName(fileName));

            Rectangle rect = new Rectangle(firstCoordinate.X, firstCoordinate.Y, secondCoordinate.X - firstCoordinate.X, secondCoordinate.Y - firstCoordinate.Y);
            Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
            bmp.Save(tmpImg, ImageFormat.Jpeg);
            g.Dispose();
            bmp.Dispose();
            


            if (File.Exists(fileName)) File.Delete(fileName);
            if (enlargeImageByPercentage != 0)
            {
                Image imgToEnlarge = Image.FromFile(tmpImg);
                Image resizedImg = resizeImage(tmpImg, new Size(imgToEnlarge.Size.Width * enlargeImageByPercentage, imgToEnlarge.Size.Height * enlargeImageByPercentage));
                resizedImg.Save(fileName, ImageFormat.Jpeg);
            }
            else
            {
                File.Copy(tmpImg, fileName, true);
            } 
        }



        private static Image resizeImage(string imgToResize, Size size)
        {
            Image _img = Image.FromFile(imgToResize);
            //Get the image current width  
            int sourceWidth = _img.Width;
            //Get the image current height  
            int sourceHeight = _img.Height;
            float nPercent = 0;
            float nPercentW = 0;
            float nPercentH = 0;
            //Calulate  width with new desired size  
            nPercentW = ((float)size.Width / (float)sourceWidth);
            //Calculate height with new desired size  
            nPercentH = ((float)size.Height / (float)sourceHeight);
            if (nPercentH < nPercentW)
                nPercent = nPercentH;
            else
                nPercent = nPercentW;
            //New Width  
            int destWidth = (int)(sourceWidth * nPercent);
            //New Height  
            int destHeight = (int)(sourceHeight * nPercent);
            Bitmap b = new Bitmap(destWidth, destHeight);
            Graphics g = Graphics.FromImage((Image)b);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            // Draw image with new width and height  
            g.DrawImage(_img, 0, 0, destWidth, destHeight);            
                       
            return b;
        }

    }
}

共有1个答案

孔海超
2023-03-14

这个类本质上与C#变体相同,不使用临时文件。main方法仅作为一个使用示例包含在内。

import java.awt.AWTException;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageCapture {

    public static void capture( String fileName, Point firstCoordinate, Point secondCoordinate, int enlargeImageByPercentage) throws AWTException, IOException {
        Rectangle rectangle = new Rectangle(firstCoordinate);
        rectangle.add(secondCoordinate);
        BufferedImage image = new Robot().createScreenCapture(rectangle);
        BufferedImage resizedImage = new BufferedImage(image.getWidth()*(100+enlargeImageByPercentage)/100, image.getHeight()*(100+enlargeImageByPercentage)/100, image.getType());
        Graphics2D graphics = (Graphics2D) resizedImage.getGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        graphics.drawImage(image, 0, 0, resizedImage.getWidth(), resizedImage.getHeight(), null);
        ImageIO.write(resizedImage, "JPEG", new File(fileName));
    }
    
    public static void main(String[] args) throws Exception {
        ImageCapture.capture("screenshot.jpg", new Point(100, 100), new Point(200,150), 250);
    }
}
 类似资料:
  • 问题内容: 任何人都可以通过建议将C#代码转换为Java代码的转换器的名称来帮助我。实际上,我有一个用C#代码编写的工具,我正在尝试对其进行修改。由于我对C#和.NET框架一无所知,因此我似乎很难自行转换大型代码。我从一些网络信息中发现,存在一些可以将C#转换为Java的工具(虽然可能不正确,但是可以)。任何人都可以通过建议这些工具的名称来帮助我。 问题答案: 免责声明: 没有工具是完美的。 但是

  • 问题内容: Web服务团队为我提供了此C#代码,该代码公开了一些我计划使用的Web服务。我的密码需要使用此代码进行加密,以便Web服务知道如何在其末尾对其进行解密。 我正在使用Java来使用此Web服务,现在,在将#C代码转换为Java代码时遇到问题,因为该Web服务无法正确解密我的密码。 这是我目前的失败尝试: 我做错什么了?非常感谢。 2013-08-07-更新 我在阅读此网站时,意识到我的模

  • 我必须将下面的Java代码转换成一个UML图,但是我不确定是否正确地完成了类之间的关联。请你告诉我UML图是否正确。

  • 问题内容: 是否可以将Python程序转换为C / C ++? 我需要实现一些算法,而且我不确定性能差距是否足够大,足以证明我在C / C 中做的所有痛苦(我不擅长)。我考虑过要编写一种简单的算法,并针对这种转换后的解决方案进行基准测试。如果仅此一项比Python版本要快得多,那么除了在C / C 中做到这一点,我别无选择。 问题答案: 是。看看赛顿。它就是这样做的:将Python转换为C以加快速

  • 问题内容: 我正在将Java库移植到C#。我使用的是Visual Studio 2008,因此没有停止使用的Microsoft Java语言转换助手程序(JLCA)。 我的方法是创建一个与Java库具有类似项目结构的新解决方案,然后将Java代码复制到ac#文件中,并将其逐行转换为有效的c#。考虑到我觉得Java易于阅读,两种语言之间的细微差别使我感到惊讶。 有些事情很容易移植(命名空间,继承等)

  • 问题内容: 有没有一种方法可以将JPanel(尚未显示)转换为BufferedImage? 谢谢, 杰夫 问题答案: 在BufferedImage中,您可以创建一个图形对象,可用于在JPanel上调用画图,如下所示: 您可能需要确保首先设置面板的尺寸。