2011-03-08 3 views
4

이미지를 쉽게 삽입 할 수있는 RichTextBox 하위 클래스를 만듭니다. this question을 시작했지만 생성 된 RTF 문자열을 가져올 수 없습니다. RTB의 SelectedRtf를 설정하려고하면 "파일 형식이 유효하지 않습니다"라는 오류가 발생합니다. 여기 내 코드입니다 :C에서 RTF 문서에 이미지 삽입

internal void InsertImage(Image img) 
{ 
    string str = @"{\pict\pngblip\picw24\pich24 " + imageToHex(img) + "}"; 

    this.SelectedRtf = str; // This line throws the exception 
} 

private string imageToHex(Image img) 
{ 
    MemoryStream ms = new MemoryStream(); 
    img.Save(ms, ImageFormat.Png); 

    byte[] bytes = ms.ToArray(); 

    string hex = BitConverter.ToString(bytes); 
    return hex.Replace("-", ""); 
} 

내가 일을하려고하지만, wmetafiles을 사용하고 무엇의 예를 작업 본 적이 있지만 그 방법을 사용하지 않으려는 것입니다. 어떤 아이디어?

감사합니다,
자레드

답변

7

RTF를 수동으로 삽입하는 것을 포기하고 클립 보드 접근 방식을 사용하기로 결정했습니다. 이 유형의 솔루션에서 찾을 수있는 유일한 손해는 클립 보드 내용을 지웠다는 것입니다. 이미지를 붙여 넣기 전에 이미지를 저장하기 만하면됩니다.

아름답게 작동합니다.

+0

삽입 이미지가 제대로 작동하지만 클립 보드 내용은 Win8 x64에서 복원되지 않습니다. XP에서는 작동합니다. – AlexP11223

+0

XP 32에서 클립 보드를 복원하지 않습니다 ... –

2

는 아마도 이것은 순진한 방법이지만, 난 그냥 RTF 문서에 PNG를 삽입 워드 패드를 사용했다. 당신이 볼 수 있듯이

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} 
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 testing\par 
\par 
\pard\sa200\sl240\slmult1{\pict\wmetafile8\picw27940\pich16378\picwgoal8640\pichgoal5070 
0100090000035af60e00000031f60e0000000400000003010800050000000b0200000000050000 
000c026b022004030000001e000400000007010400040000000701040031f60e00410b2000cc00 
6b022004000000006b0220040000000028000000200400006b020000010018000000000020ec1d 
0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff 
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 
fffffffffffffffffffffffffffffffffff 

이, 심지어는 PNG 파일 형식, 이미지 헤더는 \ PICT \ wmetafile8 시작 : 아래의 첫 번째 체크입니다. 헤더를 해당 형식으로 변경하고 작동하는지 확인하십시오.

3

RichTextBox는 PNG를 지원하지 않으며 WMF를 지원합니다. 그러나 C#에서는 변형이 아닙니다. 또한 RichTextBox는 BMP 형식의 이미지를 지원합니다. 비트 맵이 표준 .Net 클래스이기 때문에 C#에 좋습니다.