-1

私はDrawSomethingのようなプログラムをコーディングしています。しかし、色のドローペンの帰属を転送する方法がわかりません。

ドロークライアントと推測クライアントがあります。描画クライアントがペンの色を変更する場合、推測クライアントに通知し、新しい色で図を描画する方法。

ソケットを使用して新しい色を読み取る方法と、送信、文字列、または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);

パケットを受け取りました。パケットの1つは、「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 に答える