2012-12-15 88 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(); 
相關問題