Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
10
Cevap
1968
Tıklama
0
Öne Çıkarma
c# resim kaydetme
D
20 yıl (109 mesaj)
Teğmen
Konu Sahibi

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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



R
20 yıl (151 mesaj)
Teğmen

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;



D
20 yıl (109 mesaj)
Teğmen
Konu Sahibi

hocam saol da ben bunu c# uyarlıyamadım


Bu mesaja 1 cevap geldi.
R
20 yıl (151 mesaj)
Teğmen

Dr_Hack senin için yarın uyarlamaya çalışırım.


Bu mesaja 1 cevap geldi.
A
20 yıl (797 mesaj)
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
D
20 yıl (577 mesaj)
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
D
20 yıl (109 mesaj)
Teğmen
Konu Sahibi

evet o mantığı anladımda onu nasıl yapıcam ben biraz yeniyim c# ta ..onda da yardımcı olursanız size zahmet


Bu mesaja 1 cevap geldi.
R
20 yıl (151 mesaj)
Teğmen

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 >
Bu mesaja 1 cevap geldi.
D
20 yıl (109 mesaj)
Teğmen
Konu Sahibi

ustad saol ama kaydet butonuna yazılırken hata verdi sınıf hakkında..


Bu mesaja 1 cevap geldi.
R
20 yıl (151 mesaj)
Teğmen

Kullanılan namespace'lerden birisini koda dahil etmemiş olabilirsiniz. Stream sınıfları System.IO'de bulunmaktadır.


Bu mesaja 1 cevap geldi.
D
20 yıl (109 mesaj)
Teğmen
Konu Sahibi

ok saol üstad unutmuşum ..



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.