2013-08-24 2 views
1

마우스 이벤트를 사용하고 Graphics.DrawLine(), Graphics.DrawRectangle()Graphics.DrawEllipse()을 사용하여 사각형, 선 및 타원 그리기 기능을 구현 한 이미지 편집기를 개발 중입니다.이미지에 텍스트 쓰기

이미지에 텍스트 쓰기를 검색했지만 해결책을 찾지 못했습니다. 그래서 커서가 바뀔 때마다 (텍스트 상자에 텍스트 쓰기와 같은) 이미지를 클릭 할 때마다 그 위치에서 타이핑을 시작할 수 있습니다. .

Graphics.DrawString 방법은 내가 찾던과 유사하지만, 동적 타이핑에게 매우 높은 수준의 기능입니다

+0

"동적 인 것을 지원하지 않습니다"는 것을 의미합니까 ???? –

+1

사이드 노트 : 게시물의 본문과 제목의 태그에 "감사 노트"를 사용하지 마십시오. 편집 됨, [meta] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)에서 자유롭게 토론하십시오. –

+0

나는 이미지의 맨 위에 글을 써야하지만 그 방법은 문자열 만 받아 들일 수 있지만 필자는 메모장처럼 동적으로 상단 이미지에 써야합니다. (그리고 나는 그 감사를 다시 피할 것이다 ... 나는 C#에서 매우 초심자이다). – user969068

답변

2

Alex Fr은 DrawTools article에 훌륭한 드로잉 도구 모음을 제공했으며 이러한 도구는 Draw Tool Redux의 기초 역할을합니다. 당신이 클래스 ToolText 및 DrawText에를 만들기 위해 필요한 그리기 도구로 텍스트 상자 컨트롤을 추가하려면 http://www.codeproject.com/Articles/4390/AlphaBlendTextBox-A-transparent-translucent-textbo

:

은 또한에서 투명 텍스트 상자를 사용합니다.

internal class ToolText : ToolObject 
{ 
public ToolText() 
{ 
    Cursor = new Cursor(GetType(), "Rectangle.cur"); 
} 
public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e) 
{ 
    Point p = drawArea.BackTrackMouse(new Point(e.X, e.Y)); 
TextDialog td = new TextDialog(); 
td.Location = new Point(e.X, e.Y + drawArea.Top + td.Height); 
    if (td.ShowDialog() == 
    DialogResult.OK) 
    { 
    string t = td.TheText; 
    Color c = td.TheColor; 
    Font f = td.TheFont; 
    AddNewObject(drawArea, new DrawText(p.X, p.Y, t, f, c)); 
    } 
} 

자료 몇 가지 속성, 텍스트, 글꼴 등와의 DrawRectangle 오프 DrawText에 클래스 다음 ToolText 클래스에서

, 나는 텍스트 상자를 가지고 국경없는 형태 "TextDialog"가 표시 드로잉 구현 :

public override void Draw(Graphics g) 
{ 
    Pen pen = new Pen(Color); 
    GraphicsPath gp = new GraphicsPath(); 
    StringFormat format = StringFormat.GenericDefault; 
    gp.AddString(_theText, _font.FontFamily, (int)_font.Style, _font.SizeInPoints, 
        new PointF(Rectangle.X, Rectangle.Y), format); 
    // Rotate the path about it's center if necessary 
    if (Rotation != 0) 
    { 
     RectangleF pathBounds = gp.GetBounds(); 
     Matrix m = new Matrix(); 
     m.RotateAt(Rotation, new PointF(pathBounds.Left + (pathBounds.Width/2), pathBounds.Top + (pathBounds.Height/2)), 
        MatrixOrder.Append); 
     gp.Transform(m); 
    } 
    g.DrawPath(pen, gp); 
    rectangle.Size = g.MeasureString(_theText, _font).ToSize(); 
    pen.Dispose(); 
} 
+0

감사합니다. 나는 텍스트 텍스트 대화 상자를 사용하여 사용자 텍스트를 가져 오는 Draw Tools를 다운로드하고 주목했습니다.나는이 방법으로 갈지도 모른다. 쉘은 곧 시도 할 것이다. 답장을 보내 주셔서 감사합니다. – user969068

+0

모든 것을 완료 해 주셔서 감사합니다. 새 양식을 작성하고 userinput에 질문하는 아이디어를 사용하여 첫 번째 양식에서 클릭 위치를 모니터링하고 두 번째 양식에서 해당 위치에 텍스트를 삽입했습니다. 지금까지는 우리가 더 좋은 선택을 할 수 없을 때까지는 최고입니다 :) – user969068

1

을 지원하지 않으며는 .NET Framework의 일부로 사용할 수 없습니다. 마우스 이벤트 처리기 및 DrawString() 메서드를 사용하여 해당 기능을 구현해야합니다. 예를 들어 사용자가 이미지를 클릭하면 이미지 위에 투명한 배경을 가진 텍스트 상자를 만들 수 있습니다 (투명도 부분이 쉽거나 확실하지 않은지 확실하지 않음). 사용자가 텍스트를 입력 할 수 있습니다. 하지만 이렇게해도 형식 지정 기능이 제공되지는 않습니다.

전체 WYSIWYG 편집의 경우이 작업을 수행하는 기존 구성 요소를 찾거나 코드를 처음부터 작성해야합니다.

편집 :이 비슷한 질문에 봐 : 이들에 따르면 TextBox with a Transparent Background

transparent richTextBox는 투명성 TextBox 컨트롤이 지원되지 않습니다.

+0

나는 실제로이 솔루션 (transpaernt 텍스트 상자)을 찾고 있었지만 지원되지 않았으며 투명하지 못했습니다. 하지만 그때 당신이 내 도구 상자에 가지고 있지 않은 usercontrol 만 지원한다고 생각하는 위의 해결책을 발견했습니다. http://stackoverflow.com/questions/5557365/textbox-with-a-transparent-background. 답장을 보내 주셔서 감사합니다 – user969068