Şimdi Ara

c# resim kaydetme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
1.817
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar ben access veri tabanı kullanıyorum kullanıcılarımı kaydederken resimlerinide kaydetmek istiyorum bunu nasıl yapabilirim kodlar la açıklarsanız sevinirim path i string olarak kaydet dediler veya byte veri tipi kullan dediler ama nasıl



  • Dr_Hack merhaba;
    Aşağıda verdiğim kodu Delphi.NET için yazmıştım. Aynı sınıfları kullandıkları için C#’a uyarlayabilirsin. İçeriğini veritabanına yazmak istediğim resim dosyasını FileStream sınıfından yararlanıp byte byte okuyup Byte tipindeki dizi değişkene aktardım. Bu kodda kullanıcının seçtiği resim dosyasının adı formdaki 5. TextBox’a yazılmaktadır.

    Var
    Akis : FileStream;
    Uzunluk : Integer;
    Dizi : Array of Byte;
    Yol : String;
    begin
    Yol := TextBox5.Text;
    Akis := FileStream.Create(Yol, FileMode.Open, FileAccess.Read);
    Uzunluk :=Akis.Length;
    SetLength(Dizi, Uzunluk);
    Akis.Read(Dizi,0, Uzunluk);
    Ekle_Command.Parameters.Add('@Par1', SqlDbType.Char, 25, 'Marka_model');
    Ekle_Command.Parameters.Add('@Par2', SqlDbType.DateTime);
    Ekle_Command.Parameters.Add('@Par3', SqlDbType.Int);
    Ekle_Command.Parameters.Add('@Par4', SqlDbType.Int);
    Ekle_Command.Parameters.Add('@Par5', SqlDbType.Binary);
    Ekle_Command.Parameters[1].SourceColumn := 'Trafik_cikis';
    Ekle_Command.Parameters[2].SourceColumn := 'Agirlik';
    Ekle_Command.Parameters[3].SourceColumn := 'Motor_hacmi';
    Ekle_Command.Parameters[4].SourceColumn := 'Resim';
    Ekle_Command.Parameters[0].Value:= TextBox1.Text;
    Ekle_Command.Parameters[1].Value:= Convert.ToDateTime(TextBox2.Text);
    Ekle_Command.Parameters[2].Value:= TextBox3.Text;
    Ekle_Command.Parameters[3].Value:= TextBox4.Text;
    Ekle_Command.Parameters[4].Value:=Dizi;
    Ekle_Command.CommandText :=
    'INSERT INTO Arabalar(Marka_model, Trafik_cikis, Agirlik, Motor_hacmi, Resim)'+
    ' VALUES(@Par1, @Par2, @Par3, @Par4, @Par5)';
    Ekle_command.ExecuteNonQuery;
    end;




  • hocam saol da ben bunu c# uyarlıyamadım
  • Dr_Hack senin için yarın uyarlamaya çalışırım.
  • dostum mantık acısından olay şudur. bir cok resmi image olarak atarsan ilerde veritabanın cok şişer. Bunun yerine resmin bulundugu yerin adresini isim kaydeder gibi kaydediyorsun. Mesela bir ismi textbox a aktarmak yerine, bu resmin uzantısını bir picturebox'ın ilgili özelliğine aktarıyorsun.
  • Resim dosyalarını veritabanında serileştirip saklarsan,daha güvenli ,daha kolay taşınabilir bir yapı elde edersin,ancak daha düşük bir performansla yetinmek zorunda kalırsın.Arkadaşların dediği gibi path saklamak,özel bir ihtiyaç yoksa,genelde yeterli ve mantıklı olan çözümdür.
  • evet o mantığı anladımda onu nasıl yapıcam ben biraz yeniyim c# ta ..onda da yardımcı olursanız size zahmet
  • Forma 2 düğme, 2 TextBox, bir PictureBox, SqlConnection, SqlCommand ve OpenFileDialog yerleştirdim. Resim_sec adını verdiğim düğme tıklanıp resim dosyası seçilecek. Bu nedenle forma bir OpenFileDilaog nesnesi yerleştirip “Resim Seç” düğmesi tıklandığı zaman işletilmek üzere aşağıda verdiğim kodu hazırladım.

    private void Resim_sec_Click(object sender, EventArgs e)
    {
    string Dosya;
    openFileDialog1.Filter = "Resim Dosyaları |*BMP";
    openFileDialog1.ShowDialog();
    Dosya = openFileDialog1.FileName;
    textBox2.Text = Dosya;
    pictureBox1.Image = System.Drawing.Bitmap.FromFile(Dosya);
    }

    Bu kodda kullanıcının seçtiği resim dosyasının adı formdaki 2. TextBox’a yazılmakta¬dır. Kaydı yapılmak istenen arabanın resmi bu şekilde seçildikten sonra geriye kaydı verita¬banına yazmak kaldı. Bu amaçla “Kaydet” adını verdiğim düğmenin Click() yordamını aşağı¬daki gibi düzenledim.

    private void Kaydet_Click(object sender, EventArgs e)
    {
    FileStream Akis;
    long Uzunluk;
    byte[] Dizi;
    string Yol;
    Yol = textBox2.Text;
    Akis = new FileStream(Yol, FileMode.Open, FileAccess.Read);
    Uzunluk = Akis.Length;
    Dizi = new byte[Uzunluk];
    Akis.Read(Dizi, 0, Dizi.Length);
    sqlCommand1.Parameters.Add("@Par1", SqlDbType.Char, 25, "araba");
    sqlCommand1.Parameters.Add("@Par2", SqlDbType.Binary);
    sqlCommand1.Parameters[0].Value = textBox1.Text;
    sqlCommand1.Parameters[1].Value = Dizi;
    sqlCommand1.Parameters[0].SourceColumn = "araba";
    sqlCommand1.Parameters[1].SourceColumn = "Resim";
    sqlCommand1.CommandText = "INSERT INTO Arabalar(Araba, Resim) VALUES(@Par1, @Par2)";
    sqlCommand1.ExecuteNonQuery();
    }


    Bu kodda yabancısı olduğunuz veya şimdiye kadar bu kitapta söz edilmeyen herhangi bir deyim veya metot yoktur. İçeriğini veritabanına yazmak istediğim resim dosyasını FileStream sınıfından yararlanıp byte byte okuyup Byte tipindeki dizi değişkene aktardım. Bu kodu biraz geliştirip veritabanlarına kolayca resim kaydını gerçekleştirebilirsiniz.

    Bu kodu Delphi.NET kitabımdan alıp C#'a uyarladım. Başımı belaya sokan "Dizi" adlı değişkeni alışkanlıktan burada da kullanmışım. Yakında yayınlanacak yeni C# kitabımın ikinci cildini kaleme alırken tekrar sanık durumuna düşmemek için "dizi" adını verdiğim değişken başka bir işim bulmam gerekecek. Ne olur olmaz "Zirvedeki Beyinler" adı altında programcılık kitabı yazan saygıdeğer yazarlar beni tekrar sanık durumuna getirebilirler.



    < Bu mesaj bu kişi tarafından değiştirildi roadster -- 18 Aralık 2006; 14:02:11 >




  • ustad saol ama kaydet butonuna yazılırken hata verdi sınıf hakkında..
  • Kullanılan namespace'lerden birisini koda dahil etmemiş olabilirsiniz. Stream sınıfları System.IO'de bulunmaktadır.
  • ok saol üstad unutmuşum ..
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.