2016-02-20 3 views
1

Я работал над приложением приложения захвата изображения. Когда я захватил изображение с помощью приложения в планшетах окна, тогда качество изображения низкое и покажут темноту на фоне захваченного изображения. Когда я запечатлел изображение на планшете, тогда изображение будет хорошего качества. Что не хватает/проблемы в моем коде? я использовал код доли вами ...Удалить темноту при захвате изображения фона в winform C#

private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs) 
     { 
      Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();      

     ImgContainer.Image = b; 


     } 
    private void btnKeep_Click(object sender, EventArgs e) 
      { 
    int width = 457; 
       int height = 350; 

       Image tmpimg = ImgContainer.Image;     
       System.Drawing.Bitmap b = new System.Drawing.Bitmap(ImgContainer.Image, width, height); 
       System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(b); 
       gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
       gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
       gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 
       System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, width, height); 
       System.Drawing.Imaging.ImageCodecInfo codec = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[1]; 
       System.Drawing.Imaging.EncoderParameters eParams = new System.Drawing.Imaging.EncoderParameters(1); 
       eParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 
       string ImagePath = Guid.NewGuid().ToString(); 
       string imagefullpath = System.AppDomain.CurrentDomain.BaseDirectory + "imageFolder\\" + ImagePath + ".jpg";     
       b.Save(imagefullpath); 
    } 

Показать вы захвачены приложением изображения ............

enter image description here

Показать вы захвачены таблеткой ............

enter image description here

Пожалуйста, дайте мне любую идею и решение удалить темноту захваченного приложения (выше изображение).

+0

только предположение: размер изображения планшета = '3264x1826'; вы устанавливаете '457x350' и получаете изображение низкого качества. – ASh

+0

Я знаю, вы правы, но 3264x1826 преобразуется в 457x350, тогда качество не меняется только с изменением размера. –

+1

Вы говорите ... У вас есть приложение, работающее на планшете Windows, и разница в том, что изображение, снятое с помощью собственного программного обеспечения для планшетов на вашем программном обеспечении на одном планшете? Просто неясно, используете ли вы 2 разных аппаратных средства или нет. Также почему тег 'Flash'? Использовала ли одна из фотографий вспышка? Ваш реальный вопрос, как включить флеш-память камеры в своем приложении? В противном случае вы получите правильный ответ ниже. Либо принимайте это, либо редактируйте свой вопрос, чтобы более четко понимать факты и цели. –

ответ

1

Чтобы изменить гамму, вы можете использовать DrawImage с экземпляром ImageAttributes. Я нашел 0.5f работы:

enter image description here

Вот это функция, которая применяет значение гаммы в растровое изображение и возвращает модифицированный битовый массив. Это до вас ..:

  • убедитесь, что вы не утечка ресурсов
  • убедитесь, чтобы применить гамма всегда к оригиналу и не раз в той же битовой карты при предоставлении пользователю TrackBar в найти хорошее значение ..

функция:

public static Bitmap ApplyGamma(Bitmap bmp0, float gamma) 
{ 
    Bitmap bmp1 = new Bitmap(bmp0.Width, bmp0.Height); 
    using (Graphics g = Graphics.FromImage(bmp1)) 
    { 
     ImageAttributes attributes = new ImageAttributes(); 
     attributes.SetGamma(gamma, ColorAdjustType.Bitmap); 
     g.DrawImage(bmp0, new Rectangle(0, 0, bmp0.Width, bmp0.Height), 
        0, 0, bmp0.Width, bmp0.Height, GraphicsUnit.Pixel, attributes); 
    } 
    return bmp1; 
} 

вызывающий код я использовал:

Image img = Image.FromFile(yourImage);   // some image to use 
float gamma = (float)(trackBar1.Value/10f);  // a trackbar to test 
Text = "Gamma = " + gamma;      // a control display 
pictureBox1.Image = ApplyGamma((Bitmap)img, gamma); 

Если вы хотите изменить контраст и/или яркость, вы можете использовать ColorMatrix. См. Пример here!

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