Dan*_*ant 26 c# vb.net rtf image richtextbox
我看到的大多数例子都说要把它放在剪贴板上并使用粘贴,但这似乎不是很好,因为它会覆盖剪贴板.
我确实看到一种方法,使用pinvoke手动将图像放入RTF,将图像转换为wmf.这是最好的方法吗?我还能做更直接的事吗?
Syl*_*rag 54
最直接的方法是修改RTF代码以自己插入图片.
在RTF中,图片的定义如下:
'{'\ pict(brdr?&shading?&picttype&pictsize&metafileinfo?)data'}'问号表示控制字是可选的."data"只是十六进制格式的文件内容.如果要使用二进制文件,请使用\ bin控制字.
例如:
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860 hex data}
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860\bin binary data}
Run Code Online (Sandbox Code Playgroud)
\ pict =启动一个图片组,\ pngblip = png图片\ picwX =图片的宽度(X是像素值)\ pichX =图片的高度\ picwgoalX =图片的所需宽度,以缇为单位
因此,要插入图片,只需打开图片,将数据转换为十六进制,将这些数据加载到字符串中,并在其周围添加RTF代码以定义RTF图片.现在,您有一个包含图片数据的自包含字符串,您可以将其插入文档的RTF代码中.不要忘记关闭"}"
接下来,从RichTextBox(rtbBox.Rtf)获取RTF代码,将图片插入适当的位置,并设置rtbBox.Rtf的代码
您可能遇到的一个问题是.NET RTB对RTF标准没有很好的支持.
我刚刚制作了一个小应用程序*,它允许您快速测试RTB中的一些RTF代码并查看它如何处理它.您可以在此处下载: RTB测试仪(http://your-translations.com/toys).
您可以将一些RTF内容(例如,从Word)粘贴到左侧RTF框中,然后单击"显示RTF代码"以在右侧RTF框中显示RTF代码,或者您可以在右侧RTB中粘贴RTF代码并单击在"应用RTF代码"上查看左侧的结果.
您当然可以根据需要编辑代码,这样可以非常方便地测试RichTextBox是否支持您需要的命令,或者学习如何使用RTF控制字.
您可以在线下载RTF的完整规范.
NB这只是我在5分钟内拍了一下的小东西,所以我没有实现文件打开或保存,拖放或其他文明的东西.
小智 11
我使用以下代码首先从剪贴板获取数据,将其保存在内存中,将图像设置在剪贴板中,将其粘贴到Rich Text Box中,最后在剪贴板中恢复数据.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "All files |*.*"
OpenFileDialog1.Multiselect = True
Dim orgdata = Clipboard.GetDataObject
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
For Each fname As String In OpenFileDialog1.FileNames
Dim img As Image = Image.FromFile(fname)
Clipboard.SetImage(img)
RichTextBox1.Paste()
Next
End If
Clipboard.SetDataObject(orgdata)
End Sub
Run Code Online (Sandbox Code Playgroud)
OpenFileDailog1,RichTextBox1和Button1分别是打开文件对话框,富文本框和按钮控件.
小智 6
private void toolStripButton1_Click(object sender, EventArgs e)
{
FileDialog fDialog = new OpenFileDialog();
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
fDialog.RestoreDirectory = true;
fDialog.Title = "Choose file to import";
if (fDialog.ShowDialog() == DialogResult.OK)
{
string lstrFile = fDialog.FileName;
Bitmap myBitmap = new Bitmap(lstrFile);
// Copy the bitmap to the clipboard.
Clipboard.SetDataObject(myBitmap);
DataFormats.Format format = DataFormats.GetFormat(DataFormats.Bitmap);
// After verifying that the data can be pasted, paste
if(top==true && this.rtTop.CanPaste(format))
{
rtTop.Paste(format);
}
if (btmLeft == true && this.rtBottomLeft.CanPaste(format))
{
rtBottomLeft.Paste(format);
}
if (btmCenter == true && this.rtBottomCenter.CanPaste(format))
{
rtBottomCenter.Paste(format);
}
if (btmRight == true && this.rtBottomRight.CanPaste(format))
{
rtBottomRight.Paste(format);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我如何破解富文本控件:
在写字板或 MS-WORD 中插入所需的图像。将文件另存为“rtf”。在记事本中打开 rtf 文件以查看原始 rtf 代码。将所需的标签和内容复制到富文本框的“rtf”属性(附加到现有文本)。
涉及一些试验和错误,但有效。
在 C# 中,我使用占位符 StringBuilder 对象和必要的 rtf 代码。然后我只是附加图像路径。
这是一种不必学习 RTF 语法的解决方法。
| 归档时间: |
|
| 查看次数: |
74172 次 |
| 最近记录: |