Wpf İle MSSQL Resim Ekleme Ve Çekme


Bu makalemde Wpf ile MsSQL resim ekleyip daha sonra onu nasıl görüntüleyeceğimize değinecem. Bir      önceki makalemde wpf ile kameradan görüntü almayı değinmiştim bu makalemde onun devamı olarak ele alabiliriz. Şimdi formdan çektiğimiz resmi veri tabanına kayıt edip daha sonra nasıl görüntüleyebiliceğimize bakalım.



Öncelikle bunun için formumuza;
* 1 adet image
* 1 adet videoCaptureElement1
* 3 adet ( Kamera aç,Resim sil ve Kayıt için) Button
ekliyoruz. Daha sonra kod kısmına geçelim. Kodlama şu şekilde :


 //Ayarları Sıfırlıyoruz


  void temizle()
  {
            videoCaptureElement1.Visibility = Visibility.Hidden;
            image2.Visibility = Visibility.Visible;
            image2.Source = null;
            btnrsm.Content = "AÇ";
    }


private void Form_Load
{
   // Form yüklendiğinde sistem kamerasını belirtiyoruz
    if (videoCaptureElement1.VideoCaptureSource != "")
        videoCaptureElement1.Stop();
    else
        videoCaptureElement1.VideoCaptureDevice = WPFMediaKit.DirectShow.Controls.MultimediaUtil.VideoInputDevices.FirstOrDefault();

  temizle();
}

private void resimcek
{
           if (btnrsm.Content.ToString() == "AÇ")
            {
                videoCaptureElement1.Visibility = Visibility.Visible;
                image2.Visibility = Visibility.Hidden;
                btnrsm.Content = "ÇEK";
            }
            else
            {
                resimimage(videoCaptureElement1);
                videoCaptureElement1.Visibility = Visibility.Hidden;
                image2.Visibility = Visibility.Visible;
                btnrsm.Content = "AÇ";
            }
}

private void resimsil
{
  image.source=null;
}

// Resmi çek dedğimizde o anki kameradaki görüntüyü image nesnesine aktarmamız için
RenderTargetBitmap bmp = new RenderTargetBitmap(1280, 982, 732, 710, PixelFormats.Default);
private void resimimage(WPFMediaKit.DirectShow.Controls.VideoCaptureElement vce)
{
            try
            {
                bmp.Render(vce);
                image2.Source = bmp;
            }
            catch { }
}

// kayıt butonuna bastığımzda bu fonksiyonu çağırarak resmi kaydediyoruz
void resimkaydet(string adi)
 {
            if (!Directory.Exists("User\\"))
                Directory.CreateDirectory("User\\");

            BitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));

            string filename = System.IO.Path.Combine("User\\"+adi+".jpg");
            FileStream fstream = new FileStream(filename, FileMode.Create);
            encoder.Save(fstream);
            fstream.Close();
}

void kayıt(string adi)
 {
    byte[] resim = null;
    if (image2.Source != null)
     {
        resimkaydet("1");
        FileStream strm = new FileStream("User\\1.jpg", FileMode.Open, FileAccess.Read);
        resim = new byte[strm.Length];
        strm.Read(resim, 0, resim.Length);
     }
 
     SqlConnect baglanti=new SqlConnect("Bağlantı satırı");
     SqlCommand cmd;
     if (image2.Source == null)
      cmd=new SqlCommand("insert into Users (User_ad,User_sifre,User_level,User_resim,User_hizliSifre) values('" + txtuser.Text + "','" + sfre + "'," + level + ",NULL,'" + hsifre + "')",baglanti);
     else
      {
         cmd=new SqlCommand("insert into Users (User_ad,User_sifre,User_level,User_resim,User_hizliSifre) values('" + txtuser.Text + "','" + sfre + "'," + level + ",@resim,'" + hsifre + "')",baglanti);
         cmd.Parameters.AddWithValue("@resim", resim);
      }
     cmd.ExecuteNonQuery();
     MessageBox.Show("Tamam");
     temizle();
 }


// Resim kayıt işlemi tamamladığına göre şimdide dossyayı alıp bir klasore kaydedip daha sonra image nesnesinde gösterelim
void resimcekme()
{
   string resim = "";
   resim = Directory.GetCurrentDirectory() + @"\1.jpg";

   if (!File.Exists(resim))
   {                    
                SqlConnect baglanti=new SqlConnect("Bağlantı satırı");
                SqlCommand cmd=new SqlCommand ("select User_resim from Users",baglanti); // tek satır olduğunu varsayıyorum siz döngüde alabilirsiniz
                SqlDataReader rd= cmd.ExecuteReader();
                if (!rd.Read()) return;
                if (rd[0] == null) return;
         
              ///Buraya kadar sorgu işlemi zaten veri tabanında kayıt çekme şimdi dosyayı kayıt ediyoruz.
                System.IO.BinaryWriter wr = new System.IO.BinaryWriter(File.Open(resim , FileMode.Create));
                wr.Write((byte[])rd[0]);
                wr.Close();
   }
  image2.Source = new BitmapImage(new Uri(resim));
}


Umarım işinizi görür bir sonraki makalemizde görüşmek üzere kolay Gelsin...



Hiç yorum yok:

Yorum Gönder