2015-05-29 4 views
1

Я использую API GetUserMedia для захвата изображения и рисования его на холсте. Используя toDataURL() холста, я получаю «ImageUrl». URL-адрес сохраняется в виде файла PNG в локальном файле. Я ищу, что перед сохранением изображения добавьте комментарий о изображении внизу изображения (не поверх изображения), как нижний колонтитул. У меня есть код ниже. Может ли кто-нибудь предложить мне, как это сделать в C#.Добавление нижнего колонтитула в изображение в C#

+0

Вы можете загрузить колонтитул из другого изображения и объединить их с помощью Graphics.FromImage. Извините за короткий ответ, я пишу с телефона. Тем не менее, я уверен, что на StackOverflow есть много ответов о «комбинировать изображения». Взгляните на это http://stackoverflow.com/questions/7206510/combine-two-images-into-one-new-image http://stackoverflow.com/questions/6383123/merge-two-images-to- create-a-single-image-in-c-net –

+0

@ Yeldar Kurmangaliyev Как создать нижний колонтитул той же ширины оригинального изображения? Вы имели в виду это. Bitmap bitmapImg = новый битмап (img); Графика графика = Graphics.FromImage (bitmapImg); graphics.DrawString («мой комментарий», новый шрифт («Tahoma», 60), Brushes.Red, 0, 0); bitmapImg.Save (localpath, img.RawFormat); –

+0

Да. Вам нужно рассчитать правильное местоположение и размер добавленной строки. –

ответ

2

Вы можете создать новый битмап, который будет выше от исходного изображения, чтобы соответствовать нижнему колонтитулу ниже. Затем скопируйте исходное изображение и нижний колонтитул в это растровое изображение и сохраните новое растровое изображение.

Метод делать хотел бы это (предполагая, что ширина FOOTER < = ширина изображения):

public Bitmap AppendImageFooter(System.Drawing.Image bmp, System.Drawing.Image footer) 
{ 
    //Create new image that will be bigger then original image to make place for footer 
    Bitmap newImage = new Bitmap(bmp.Height+footer.Height,bmp.Width); 

    //Get graphics from new Image and copy original image and next footer below 
    Graphics g = Graphics.FromImage(newImage); 
    g.DrawImage(bmp, new Point(0, 0)); 
    g.DrawImage(footer, new Point(0, bmp.Height)); 
    g.Dispose(); 

    return newImage; 
} 

И вы можете вписать его в свой код в этом месте:

var footer = Image.FromFile("path_to_your_footer.png");  
imageByte= Convert.FromBase64String(ImageUrl); 
     using (var streamBitmap = new MemoryStream(imageByte)) 
      { 
       using (var img = Image.FromStream(streamBitmap)) 
       { 
         var imageWithFooter = AppendImageFooter(img, footer); 
         imageWithFooter.Save(localPath); 

       } 
      } 

Edited в ответ на дополнительный вопрос из комментариев:

Вы можете построить нижний колонтитул во время выполнения. Пример кода ниже, конечно, вы можете сделать все, что вам нравится в любой стиль вам нравится:

public Bitmap AppendImageFooter(System.Drawing.Image bmp, string text) 
{ 
    //Create new image that will be bigger then original image to make place for footer 
    Bitmap newImage = new Bitmap(bmp.Height+200,bmp.Width); 

    //Get graphics and copy image and below the footer 
    Graphics g = Graphics.FromImage(bmp); 
    g.DrawImage(bmp, new Point(0, 0)); 
    g.FillRectangle(new SolidBrush(Color.Black), 0, bmp.Height, bmp.Width, 200); 
    g.DrawString(text, new Font("Arial", 14), new SolidBrush(Color.White), 20, bmp.Height + 20); 
    //Anything else you like, circles, rectangles, texts etc.. 
    g.Dispose(); 

    return newImage; 
} 
+0

Можете ли вы создать нижний колонтитул во время выполнения, вместо этого взять из какого-то источника –

+0

@VivekRanjan Конечно, только что обновил мое сообщение с помощью метода меток, который создает черный нижний колонтитул с белым текстом во время выполнения. Вы можете рисовать аналогичным образом, как вам нравится, даже комбинировать графическое изображение + текст (например, логотип + url) или что-то еще. –

1

Вот самый простой способ: Я только что создал новый образ (сноска), новое изображение, на котором старый образ + изображение нижнего колонтитула.

    int footerHeight = 30; 
        Bitmap bitmapImg = new Bitmap(img);// Original Image 
        Bitmap bitmapComment = new Bitmap(img.Width, footerHeight);// Footer 
        Bitmap bitmapNewImage = new Bitmap(img.Width, img.Height + footerHeight);//New Image 
        Graphics graphicImage = Graphics.FromImage(bitmapNewImage); 
        graphicImage.Clear(Color.White); 
        graphicImage.DrawImage(bitmapImg, new Point(0, 0)); 
        graphicImage.DrawImage(bitmapComment, new Point(bitmapComment.Width, 0)); 
        graphicImage.DrawString("Hi, This is Vivek !", new Font("Arial", 15), new SolidBrush(Color.Black), 0, bitmapImg.Height + footerHeight/6); 
        bitmapNewImage.Save(yourImagePath); 
        bitmapImg.Dispose(); 
        bitmapComment.Dispose(); 
        bitmapNewImage.Dispose(); 

'IMG' исходное изображение.

Here is the pic

Смежные вопросы