-1

我正在编写一个像 DrawSomething 这样的程序。但我不知道如何转移颜色的drawpen的属性。

我有一个绘图客户端和一个猜测客户端。当绘图客户端更改笔颜色时,如何通知猜测客户端并以新颜色绘制图表。

我想知道客户端或表单如何使用套接字读取新颜色以及传输、字符串或 RGB 中的颜色类型?

我正在使用此代码。我认为它是字符串,然后我可以使用 ptp 协议进行传输,它将显示在客户端的另一端(猜测客户端)。

    public Color _drawPenColor = Color.Red;
    public int _drawPenWidth = 10;        
    ClientSendPtPPacket("DRAW-" + e.X.ToString() + "-" + e.Y.ToString() + "-" 
                                + _drawPenWidth.ToString() + "-" 
                                + _drawPenColor.ToString(),
                                opponentIP, opponentPort);

我收到了数据包,其中一个数据包是“ Draw-150-234(postion)-10(width)-Color [red] ”。

如果我使用调色板更改颜色,它将是“ Draw-150-234-10-Color [A=255, R=45, G=28, B=45] ”。IP 和端口被忽略。

所以我的问题是如何获得新颜色。

PS:ClientSendPtPPacket 类

private void ClientSendPtPPacket(string content, IPAddress toIp, int toPort)
    {
        try
        {
            if (_socketClient != null && _socketClient.Connected == true)
            {
                string sendPacket = _localIP.ToString() + "-" + _localPort.ToString() + "-" +
                    toIp.ToString() + "-" + toPort.ToString() + "-" + content;
                Byte[] bytePacket = System.Text.Encoding.UTF8.GetBytes(sendPacket);
                _socketClient.Send(bytePacket);
            }

        }
        catch (Exception excep)
        {

        }
    }
4

1 回答 1

0

我自己解决了这个问题。我使用了 toAgrb()FromAgrb()方法。

ToArgb() 用于显示颜色数量,FromArgb() 用于获取颜色数量。所以,我猜客户会知道绘图客户端一直使用的颜色,甚至绘图客户端已经改变了它的颜色。

但我可以在字符串类型中使用 ToAgrb() 和 FromArgb() 。

我的例子是:

        public Color ColorChange(string _color)
    {
        Color _newColor = new Color();
        switch (_color)
        {
            case "Red": _newColor = Color.FromArgb(Color.Red.ToArgb()); break;
            case "Orange": _newColor = Color.FromArgb(Color.Red.ToArgb()); break;
            case "Yellow": _newColor = Color.FromArgb(Color.Yellow.ToArgb()); break;
            case "GreenYellow": _newColor = Color.FromArgb(Color.GreenYellow.ToArgb()); break;
            case "DeepSkyBlue": _newColor = Color.FromArgb(Color.DeepSkyBlue.ToArgb()); break; 
            case "DarkBlue": _newColor = Color.FromArgb(Color.DarkBlue.ToArgb()); break;
            case "Purple": _newColor = Color.FromArgb(Color.Purple.ToArgb()); break;
            case "Black": _newColor = Color.FromArgb(Color.Black.ToArgb()); break;
            case "Gray": _newColor = Color.FromArgb(Color.Gray.ToArgb()); break;
            case "White": _newColor = Color.FromArgb(Color.White.ToArgb()); break;
        }
        return _newColor;
    }
于 2012-05-26T09:45:03.270 回答