2014-05-24 67 views
2

我試圖開發一種簡單的應用程序(C#,WinForms的時,Visual Studio 2013),其能夠以添加註釋到圖像:在運行時

1)從硬盤驅動器加載的圖像;

2)添加anotations到的圖片,保存修改(換句話說,用戶能夠利用(在任何地方字符串)在運行時的圖像)。

對於加載圖像我所做的:

private void LoadButton_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog theDialog = new OpenFileDialog(); 
     theDialog.Title = "Open Image File"; 
     theDialog.Filter = "Image Files|*.jpg;*jpeg;*.png;*.gif;*.bmp;*.tiff;"; 
     theDialog.InitialDirectory = @"C:\"; 
     if (theDialog.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox.Image = Image.FromFile(theDialog.FileName); 
     } 
    } 

但我無法弄清楚如何實現第二任務。

任何幫助將是偉大的。

回答

3

使用Graphis.DrawString method在指定位置添加一個文本(用指定的顏色,字體,字體大小等):

try 
{   
    var image = Image.FromFile("d:\\temp\\image.jpg"); 
    using (var graphics = Graphics.FromImage(image)) 
    { 
     var font = new Font(FontFamily.GenericSansSerif, 16.0f); 
     graphics.DrawString("copyright 2014", font, Brushes.Red, new Point(10, 10)); 
    } 
    image.Save("d:\\temp\\image_copyright.jpg"); 
} 
catch (Exception exception) 
{ 
    Console.WriteLine(exception.Message); 
} 

原圖:

enter image description here

w ^第i個所添加的文本:

enter image description here

如果可能的話(和適當的)嘗試總是包裹在using聲明Graphics對象的創建。使用Graphics.FromImage method從現有圖像創建一個圖形對象(如你的情況)。這樣,不再需要的對象的處理將由框架自動完成。使用Point對象將文字放在所需的位置,其中(0,0)是圖像的左上角。


UPDATE

如果你想在一個自定義的位置添加文本在PictureBox,然後綁定PictureBox.MouseClick事件,以客戶座標轉換的座標,使用轉換鼠標座標來定位文本在圖像上並刷新PictureBox控制中,圖像被修改後:

private void pictureBox_MouseClick(object sender, MouseEventArgs e) 
{ 
    var text = !String.IsNullOrEmpty(textBox.Text) ? textBox.Text : "copyright 2014"; 
    var imageCoordinates = translateStretchImageMousePosition(new Point(e.X, e.Y)); 
    using (var graphics = Graphics.FromImage(pictureBox.Image)) 
    { 
     var font = new Font(FontFamily.GenericSansSerif, 16.0f); 
     graphics.DrawString(text, font, Brushes.Red, imageCoordinates); 
    } 
    pictureBox.Refresh(); 
} 

的輸出是:

enter image description here

因爲PictureBox具有圖像大小的不同模式,你需要計算點擊座標不同。如何做到這一點顯示在這CodeProject article。你也可以嘗試使用.NET框架提供的不同的client coordinate translation functions

+0

問題是,用戶必須能夠在應用程序運行時添加字符串。他應該能夠通過單擊圖像而不是在指定點(在代碼中)添加字符串。無論如何感謝回答。 –

3

您可以使用此代碼

FileStream FILESTRM = new FileStream(@"INPUT_FILE_PATH", FileMode.Open, FileAccess.Read); 
Image IMG = Image.FromStream(FILESTRM); 
FILESTRM.Close(); 
Bitmap b = new Bitmap(IMG); 
Graphics graphics = Graphics.FromImage(b); 
//     Custom   Font  Text Color Text 
//     Text   Name   ||  Position 
//      \/   \/   \/   \/ 
graphics.DrawString("YOUR STRING", this.Font, Brushes.Black, 0, 0); 
b.Save(@"OUTPUT_FILE_PATH", IMG.RawFormat); 
IMG.Dispose(); 
b.Dispose(); 
+0

問題是用戶必須能夠在應用程序運行時添加字符串。他應該能夠通過單擊圖像而不是在指定點(在代碼中)添加字符串。無論如何感謝回答。 –

+0

您可以用鼠標的位置替換**文本位置** –