2012-12-15 3 views
3

내 프로그램에서는 사용자가 graphics.DrawString() 메서드를 사용하여 이미지 위에 놓이는 텍스트를 입력 할 수 있습니다. 그런 다음이 이미지를 저장하면 텍스트없이 저장됩니다.이미지에 텍스트 추가 및 저장

어떻게 두 이미지를 하나의 이미지로 저장할 수 있습니까?

몇 가지 예를 보았지만 어느 것도 도움이되지 않았습니다.

private void txtToolStripMenuItem_Click(object sender, System.EventArgs e) 
    { 
     Rectangle r = new Rectangle(535, 50, original_image.Width, original_image.Height); 
     Image img = Image.FromFile("C:\\PCB.bmp"); 

     Bitmap image = new Bitmap(img); 

     StringFormat strFormat = new StringFormat(); 

     strFormat.Alignment = StringAlignment.Center; 
     strFormat.LineAlignment = StringAlignment.Center; 

     Graphics g = Graphics.FromImage(image); 

     g.DrawString("Hellooooo", new Font("Tahoma", 40), Brushes.White, 
       r, strFormat); 

     image.Save("file_PCB.Bmp", ImageFormat.Bmp); 
    } 

답변

2

왜냐하면 캔버스없이 그래픽 객체를 생성하기 때문입니다. 당신은 아무 것도 그리지 않으므로 텍스트를 그리는 것으로 변경되는 것은 없습니다.

Graphics g = Graphics.FromImage(image_save); 

그런 다음 텍스트를 그릴 및 저장 :

먼저 다음 그래픽은 그 이미지에 그리기위한 객체를 생성, 이미지의 복사본을 생성 (또는 빈 비트 맵을 만들고 그 위에 이미지를 그릴) 영상.

+0

나는 테스트 방법을 만들었습니다. 이게 뭔가? 이것도 작동하지 않지만. 업데이트 된 원래 질문. – user1221292

+0

@ user1221292 : 원래 질문에서 너무 많이 제거하지 마십시오. 그러면 답이 이해가되지 않습니다. 지금 가지고있는 코드는 기본적으로 정확합니다. 내가 말할 수있는 것부터 이미지만큼 큰 직사각형을 만들고 있지만 부분적으로 이미지 바깥 쪽이되도록 오프셋 한 다음 그 사각형 중심에 텍스트를 쓰면 이미지 밖의 텍스트를 그리는 것입니다. . – Guffa

0

아래 코드를 시도해 볼 수 있습니다. 워터 마크 이미지로 사용했습니다.

System.Drawing.Image bitmap = (System.Drawing.Image)Bitmap.FromFile(Server.MapPath("image\\img_tripod.jpg")); // set image 

     Font font = new Font("Arial", 20, FontStyle.Italic, GraphicsUnit.Pixel); 

     Color color = Color.FromArgb(255, 255, 0, 0); 
     Point atpoint = new Point(bitmap.Width/2, bitmap.Height/2); 
     SolidBrush brush = new SolidBrush(color); 
     Graphics graphics = Graphics.FromImage(bitmap); 

     StringFormat sf = new StringFormat(); 
     sf.Alignment = StringAlignment.Center; 
     sf.LineAlignment = StringAlignment.Center; 


     graphics.DrawString(watermarkText, font, brush, atpoint, sf); 
     graphics.Dispose(); 
     MemoryStream m = new MemoryStream(); 
     bitmap.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg); 
     m.WriteTo(Response.OutputStream); 
     m.Dispose(); 
     base.Dispose();