none
diziyi kaydetme RRS feed

  • Soru

  • merhabalar.

    öncelikle yazdığım bir uygula ile bir görüntüyü belirli bir düzene göre bir diziye dönüştürdüm.

    örneğin picturebox1'e yükenen  x resmini ; button1 tıklandığında bu resim 

    int[,] xresim ={{10,15},{20,25},{30,35},{40,45}} 

    gibi bir dizi haline getiriyor. şimdi bu diziyi bir yere kaydetmem gerekiyor ki daha sonra istediğim zaman ulaşabileyim. ama nereye ve nasıl kaydedeceğimi ve daha sonra nasıl ulaşacagim?

    mesela x resmi için xresim dizisi'ni listbox nesnesine "x resmin dizisi" adı altında kaydet gibi bir durum olacak.  

    12 Kasım 2019 Salı 20:45

Yanıtlar

  • Araştırmanız gereken konu "Serialization" karşınıza CSV,TSV,JSON,XML,YAML,Binary gibi tonlarca format çıkacak. Şayet başka uygulama bunu kullanmayacak ve elle değiştirilebilmesi gerekmiyorsa BinarySerialization yeterli olacaktır.

    Sizin örneğiniz için kod:

    int[,] xresim ={{10,15},{20,25},{30,35},{40,45}};
    
    // dosyaya çıkartma
    var dosya = @"C:\cihan\t.bin";
    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    using (var stream = new FileStream(dosya, FileMode.Create, FileAccess.Write, FileShare.None))
    {
    	formatter.Serialize(stream, xresim);
    }
    
    // dosyadan okuma
    int [,] yresim;
    using (var stream = new FileStream(dosya, FileMode.Open, FileAccess.Read, FileShare.None))
    {
    	yresim = (int[,])formatter.Deserialize(stream);
    }
    


    www.cihanyakar.com

    13 Kasım 2019 Çarşamba 09:25
  • Gerek "sadece hafıza" gerekse "diske" kaydetme icin en ideali veritabanıdır.

    Boyle kucuk bir is icin LiteDb, SQLite gibi bir veritabanı kullanabilirsiniz. LiteDb (NuGet) ile ornek:

    void Main()
    {
      TestKaydet();
      TestOku();
    }
    
    private void TestKaydet()
    {
    	int[,] xresim = { { 10, 15 }, { 20, 25 }, { 30, 35 }, { 40, 45 } };
    	int[,] yresim = { { 100, 150 }, { 200, 250 }, { 300, 350 }, { 400, 450 } };
    
    	var r1 = new Resim { Id = "X resimi", Dizi = ToSingleDim(xresim) };
    	var r2 = new Resim { Id = "Y resimi", Dizi = ToSingleDim(yresim) };
    	
    	Kaydet(r1);
    	Kaydet(r2);
    }
    
    private void TestOku()
    {
    	var x = Oku("X resimi");
    	Goster(x);
    	var y = Oku("Y resimi");
    	Goster(y);
    }
    
    private void Goster(Resim r)
    {
    	Console.WriteLine(r.Id);
    	var d = ToMultiDim(r.Dizi, 2);
    	for (int i = 0; i < d.GetLength(0); i++)
    	{
    		for (int j = 0; j < d.GetLength(1); j++)
    		{
    			Console.Write($"[{d[i, j]}] ");
    		}
    		Console.WriteLine();
    	}
    }
    
    private readonly string dbName = @"C:\Temp\MyData.db";
    private void Kaydet(Resim r)
    {
    	using (var db = new LiteDatabase(dbName))
    	{
    		var col = db.GetCollection<Resim>("resimler");
    		col.Upsert(r);
    		col.EnsureIndex(c => c.Id);
    	}
    }
    
    private Resim Oku(string ad)
    {
    	using (var db = new LiteDatabase(dbName))
    	{
    		var col = db.GetCollection<Resim>("resimler");
    		return col.FindOne(c => c.Id == ad);
    	}
    }
    
    private static int[] ToSingleDim(int[,] arr)
    {
    	int cols = arr.GetLength(1);
    	int[] dizi = new int[arr.Length];
    	for (int i = 0; i < arr.Length; i++)
    	{
    		dizi[i] = arr[i / cols, i % cols];
    	}
    	return dizi;
    }
    private static int[,] ToMultiDim(int[] arr, int cols)
    {
    	int[,] dizi = new int[arr.Length / cols, cols];
    	for (int i = 0; i < arr.Length; i++)
    	{
    		dizi[i / cols, i % cols] = arr[i];
    	}
    	return dizi;
    }
    
    
    public class Resim
    { 
    	public string Id { get; set; }
    	public int[] Dizi  { get; set; }
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen acemi mustafa 14 Kasım 2019 Perşembe 16:55
    13 Kasım 2019 Çarşamba 14:12
    Yanıtlayıcı

Tüm Yanıtlar

  • Araştırmanız gereken konu "Serialization" karşınıza CSV,TSV,JSON,XML,YAML,Binary gibi tonlarca format çıkacak. Şayet başka uygulama bunu kullanmayacak ve elle değiştirilebilmesi gerekmiyorsa BinarySerialization yeterli olacaktır.

    Sizin örneğiniz için kod:

    int[,] xresim ={{10,15},{20,25},{30,35},{40,45}};
    
    // dosyaya çıkartma
    var dosya = @"C:\cihan\t.bin";
    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    using (var stream = new FileStream(dosya, FileMode.Create, FileAccess.Write, FileShare.None))
    {
    	formatter.Serialize(stream, xresim);
    }
    
    // dosyadan okuma
    int [,] yresim;
    using (var stream = new FileStream(dosya, FileMode.Open, FileAccess.Read, FileShare.None))
    {
    	yresim = (int[,])formatter.Deserialize(stream);
    }
    


    www.cihanyakar.com

    13 Kasım 2019 Çarşamba 09:25
  • Gerek "sadece hafıza" gerekse "diske" kaydetme icin en ideali veritabanıdır.

    Boyle kucuk bir is icin LiteDb, SQLite gibi bir veritabanı kullanabilirsiniz. LiteDb (NuGet) ile ornek:

    void Main()
    {
      TestKaydet();
      TestOku();
    }
    
    private void TestKaydet()
    {
    	int[,] xresim = { { 10, 15 }, { 20, 25 }, { 30, 35 }, { 40, 45 } };
    	int[,] yresim = { { 100, 150 }, { 200, 250 }, { 300, 350 }, { 400, 450 } };
    
    	var r1 = new Resim { Id = "X resimi", Dizi = ToSingleDim(xresim) };
    	var r2 = new Resim { Id = "Y resimi", Dizi = ToSingleDim(yresim) };
    	
    	Kaydet(r1);
    	Kaydet(r2);
    }
    
    private void TestOku()
    {
    	var x = Oku("X resimi");
    	Goster(x);
    	var y = Oku("Y resimi");
    	Goster(y);
    }
    
    private void Goster(Resim r)
    {
    	Console.WriteLine(r.Id);
    	var d = ToMultiDim(r.Dizi, 2);
    	for (int i = 0; i < d.GetLength(0); i++)
    	{
    		for (int j = 0; j < d.GetLength(1); j++)
    		{
    			Console.Write($"[{d[i, j]}] ");
    		}
    		Console.WriteLine();
    	}
    }
    
    private readonly string dbName = @"C:\Temp\MyData.db";
    private void Kaydet(Resim r)
    {
    	using (var db = new LiteDatabase(dbName))
    	{
    		var col = db.GetCollection<Resim>("resimler");
    		col.Upsert(r);
    		col.EnsureIndex(c => c.Id);
    	}
    }
    
    private Resim Oku(string ad)
    {
    	using (var db = new LiteDatabase(dbName))
    	{
    		var col = db.GetCollection<Resim>("resimler");
    		return col.FindOne(c => c.Id == ad);
    	}
    }
    
    private static int[] ToSingleDim(int[,] arr)
    {
    	int cols = arr.GetLength(1);
    	int[] dizi = new int[arr.Length];
    	for (int i = 0; i < arr.Length; i++)
    	{
    		dizi[i] = arr[i / cols, i % cols];
    	}
    	return dizi;
    }
    private static int[,] ToMultiDim(int[] arr, int cols)
    {
    	int[,] dizi = new int[arr.Length / cols, cols];
    	for (int i = 0; i < arr.Length; i++)
    	{
    		dizi[i / cols, i % cols] = arr[i];
    	}
    	return dizi;
    }
    
    
    public class Resim
    { 
    	public string Id { get; set; }
    	public int[] Dizi  { get; set; }
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen acemi mustafa 14 Kasım 2019 Perşembe 16:55
    13 Kasım 2019 Çarşamba 14:12
    Yanıtlayıcı
  • çok teşekkür ederim. Allah razı olsun :)

    acemi mustafa

    14 Kasım 2019 Perşembe 16:54
  • çok teşekkür ederim. emeginize yüreginize saglık :) 

    acemi mustafa

    14 Kasım 2019 Perşembe 16:55