【问题标题】:Java Socket Paint ProgramJava 套接字绘制程序
【发布时间】:2016-08-09 12:09:54
【问题描述】:

我制作了一个使用套接字将点从画布传输到所有其他用户画布的绘图程序。当我在不同的屏幕上测试我的程序时,我遇到了一个问题。在我的笔记本电脑 1366x768 上一切顺利,但从 1920x1080 屏幕笔记本电脑不连续。如果我在 1920x1080 屏幕的笔记本电脑上画一些东西,它会在我的 1366x768 屏幕上显示平滑,但是当我在 1366x768 上画一些东西时,它会发生我所说的。我认为问题不在于连接,因为我试图打开服务器两台笔记本电脑(不是同时),从大的一台运行一次,从小的一台运行一次。跟分辨率有关系吗?我该如何解决这个问题?

public void mousePressed(MouseEvent e) {
    x=e.getX();
    y=e.getY();
}

public void mouseDragged(MouseEvent e) {
    x1=e.getX();
    y1=e.getY();
    gr=canvas.getGraphics();
    gr.drawLine(x, y, x1, y1);
    if(x!=x1||y!=y1)
    {
        try {
        PrintStream ps=new PrintStream(sc.getOutputStream());
        ps.println("!!##print"+" "+x+" "+" "+y+" "+x1+" "+y1);
    } catch (IOException e1) {

        e1.printStackTrace();
    }
    }
    x=x1;
    y=y1;
}

这里是打印的函数。忽略 System.out,因为我用它们来验证一些事情。

else if(mes.charAt(0)=='!'&&mes.charAt(1)=='!'&&mes.charAt(2)=='#'&&mes.charAt(3)=='#'&&
                        mes.charAt(4)=='p'&&mes.charAt(5)=='r'&&mes.charAt(6)=='i'&&mes.charAt(7)=='n'&&
                        mes.charAt(8)=='t'
                        )
                {
                    System.out.println("am intrat la desenat");
                    StringTokenizer tok=new StringTokenizer(mes);
                    String aii=tok.nextToken();
                    ArrayList<Integer> numere=new ArrayList<Integer>();
                    for(int i=0;i<4;i++)
                    {   
                        numere.add(Integer.parseInt(tok.nextToken()));
                    }
                    Graphics gs=canvas.getGraphics();
                    gs.drawLine(numere.get(0), numere.get(1), numere.get(2), numere.get(3));
                }

编辑:发生的另一件事是没有出现 1920x1080 画布的下限。看起来我有一个小画布,分辨率为 1366x768 的画布

【问题讨论】:

  • 您能否提供一些代码,用于发送/接收积分以及如何绘制积分?
  • 如果你想要别的说,我会说的
  • 不是来自分辨率,而是来自网络

标签: java canvas graphics


【解决方案1】:

好的,我认为您应该进行某种转换:

1.制定标准分辨率 假设1600*900是标准分辨率,那么你必须计算屏幕的比例

2.计算比例因子
标准分辨率 = 1600*900
用户分辨率 = 1366x768
Scale = (1600/1366) 和 (900/768) 都等于接近 1.171 的数字,所以这就是你的比例“因子”

3.现在乘以点 接下来您要做的是将点、点的坐标与您在步骤 2 中的因子相乘。然后发送此信息


你也可以反其道而行之! 也许将标准分辨率设为创建会话的主机的分辨率会更好

我希望这个答案会给你一个额外的可能性,或者我给了你一种新的方法。

【讨论】:

  • 你确定是因为分辨率而不是网络延迟?我问这个是因为我想不通..
  • 它不是来自分辨率。我认为它来自网络。当我在同一台电脑上连接 4 个或更多时,我得到不连续的线路。但无论如何感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多