Не могу вставить картинку в RichTextBox - PullRequest
2 голосов
/ 26 августа 2010

Я хочу вставить изображение в RichTextBox.Я добавляю картинку в кодировке.

Это основной код, добавление изображения jpg:

MemoryStream memoryStream = new MemoryStream();
img.Save(memoryStream,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = memoryStream.ToArray();
String width = img.Width.ToString();
String height = img.Height.ToString();
String hexImgStr=BitConverter.ToString(bytes, 0).Replace("-","");
String picStr=@"{\pict\jpegblip\picw"+width+@"\pich"+height+
              @"\picwgoal"+width+@"\pichgoal"+height+" "+hexImgStr+"}";

Затем я вставляю «picStr» в документ rtf.Но изображение не видно.Я думал, что "hexImgStr" может быть неправильно.Я также генерирую "hexImgStr" по-другому:

FileStream fs = new FileStream(imgPath,FileMode.Open);
BinaryReader br=new BinaryReader(fs);
//byte[] bytes=new byte[fs.Length];
String hexImgStr="";
for (long i = 0; i < fs.Length; i++)
{
    //bytes[i] = br.ReadByte();
    hexImgStr +=Convert.ToString(br.ReadByte(),16);
}

Изображение также не видно.Что с ним не так.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Здесь высока вероятность отказа.Начинается со вставки RTF в нужном месте.Истинной проблемой, скорее всего, является именно тот формат, который вы генерируете.Изображения являются встроенными объектами OLE для RTB, им нужен заголовок метаданных, который описывает объект.В .NET нет никакой поддержки для этого, встраивание OLE давно прошло путь додо.

Одна вещь, которую я знаю, которая работает, это получение изображения в RTB через буфер обмена.Например:

    private void button1_Click(object sender, EventArgs e) {
        using (var img = Image.FromFile("c:\\screenshot.png")) {
            Clipboard.SetImage(img);
            richTextBox1.Paste();
        }
    }

При необходимости измените свойство SelectionStart, чтобы определить, куда вставляется изображение.

1 голос
/ 08 октября 2012

Сначала добавьте изображение в picturebox, затем добавьте приведенный ниже код в событие нажатия кнопки

Или добавьте изображение вручную ..... image.FromFile ("Source");

Clipboard.SetImage(PictureBox1.Image);

this.RichTextBox1.Paste ();

...