0

RichTextbox 粘贴方法究竟是如何工作的?我想将图像插入 RTB。如果我使用 Clipboard.SetImage(image); 然后是 RTB.Paste(); 它工作正常。但我想自己做。我有以下代码。但它不起作用:

        byte[] byteArray = null;
        using (MemoryStream ms = new MemoryStream())
        {
            image.Save(ms, ImageFormat.Png);
            ms.Seek(0, 0);
            byteArray = ms.ToArray();
        }
        string hexString = "";
        foreach (byte b in byteArray)
        {
            hexString += b.ToString("x2");
        }

        string mpic = @"{\pict\pngblip\picw396\pich396\picwgoal225\pichgoal225 ";
        mpic += hexString;
        mpic += "}";

        Console.WriteLine(mpic);
        return mpic;

我发现使用 Paste() 方法后,hexString 中的值与richTextbox 中的值不同。

如果我使用正确的十六进制值,这可以正常工作。

        string mpic = @"{\pict\wmetafile8\picw396\pich396\picwgoal225\pichgoal225 ";
        mpic += hexString;
        mpic += "}";

我想我需要的只是将图像转换为 WMF hexa 值。但我不知道该怎么做。

如果它有帮助,这就是有效的:

010009000003a001000000008a0100000000050000000b0200000000050000000c028c018c018a
010000430f2000cc0000000f000f00000000008c018c0100000000280000000f0000000f000000
0100180000000000d0020000c40e0000c40e00000000000000000000ffffffffffffffffffc5d9
d83a78750a4442011f1e000404011f1e0a44423a7875c5d9d8ffffffffffffffffff000000ffff
ffffffff669896073e3c00636000a7a100dcd400fbf200dcd400a7a1006360073e3c669896ffff
ffffffff000000ffffff66989604393700b0aa00fff600fff600fff600fff600fff600fff600ff
f600b0aa043937669896ffffff000000c5d9d8073e3c00b0aa00fff600fff600fff600fff600ff
f600fff600fff600fff600fff600b0aa073e3cc5d9d80000003a787500636000fff600fff600ff
f600000000000000000000000000000000fff600fff600fff60063603a78750000000a444200a7
a100fff600fff600000000fff600fff600fff600fff600fff600000000fff600fff600a7a10a44
42000000011f1e00dcd400fff600000000fff600fff600fff600fff600fff600fff600fff60000
0000fff600dcd4011f1e00000000040400fbf200fff600fff600fff600fff600fff600fff600ff
f600fff600fff600fff600fff600fbf2000404000000011f1e00dcd400fff600fff600fff600ff
f600fff600fff600fff600fff600fff600fff600fff600dcd4011f1e0000000a444200a7a100ff
f600fff600000000fff600fff600fff600fff600fff600000000fff600fff600a7a10a44420000
003a787500636000fff600fff600000000fff600fff600fff600fff600fff600000000fff600ff
f60063603a7875000000c5d9d8073e3c00b0aa00fff600fff600fff600fff600fff600fff600ff
f600fff600fff600b0aa073e3cc5d9d8000000ffffff66989604393700b0aa00fff600fff600ff
f600fff600fff600fff600fff600b0aa043937669896ffffff000000ffffffffffff669896073e
3c00636000a7a100dcd400fbf200dcd400a7a1006360073e3c669896ffffffffffff000000ffff
ffffffffffffffc5d9d83a78750a4442011f1e000404011f1e0a44423a7875c5d9d8ffffffffff
ffffffff000000030000000000

感谢您的回复。

4

1 回答 1

0

由于您实际上是在创建自己的 RTF 格式并将其附加到控件中,因此我认为您可以使用以下内容:

RTB.Rtf += mpic;
于 2012-09-11T16:12:44.337 回答