Şimdi ilk sormamız gereken, "geri al" işlemi olacak mı? Geri alma yeteneği olan bir paint, ne yazık ki bu işlemin olmadığı paint'ten daha zor kodlanacaktır.
İkinci olarak hangi tool'lar olacak?
"Resmi içeri alma" dediğin şeyi anlamadım. Dosyayı açmak mı? Bunun için bir kaç adım var;
Öncelikle "Canvas" diye bir class yaparsın mesela. Control'den türetilmiş bir class olması yeterli. Önemli olan iki şey;
1. Constructor'da mutlaka "DoubleBuffered=true;" diyeceksin. Yoksa pırpır edip durur.
2. Zoom diye bir property olacak, width ve height değerleri sorgulandığında asıl width ve height'ı bu zoom katsayısıyla çarpmalı. Veya her zoom in/zoom out edildiğinde genişlik ve yüksekliği tekrar hesaplar.
3. System.Drawing.Bitmap'ten ibaret bir "buffer" property'si olmalı. Sen aslında kullanıcının yaptığı her değişikliği bu "buffer"a yapacaksın, OnPaint eventinde de sadece bu buffer'ı çiziverecek.
4. Yeni dosya yüklendiğinde;
Kod:
//Yüklenmek istenen dosya yeri 'path' olsun.
buffer.Dispose(); //Eski buffer yüzünden memory leak olmasın diye emin olmak için dispose ediyoruz.
buffer=(System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(path);
//Bitti.. Bu kadar.. Son olarak genişlik ve yüksekliği de ayarlarsın biter.
Width=buffer.Width*zoom;
Height=buffer.Height*zoom;
GDI+, geotiff, bigtiff gibi çok büyük dosyalar harici bilinen bütün imaj dosyalarını destekler. Yani hiç bir şey yapmana gerek yoktur, "dosyayı oku" dersin, o otomatik olarak bir bitmap okur.
Transparanlık, dpi vs. hep aynı olsun istersen, aynı boyutta ve istediğin bitrate'e vs. sahip bir bitmap oluşturur, System.Drawing.Graphics.FromBitmap ile bu bitmap'in graphics objesini alır, sonra da okuduğun dosyayı bu boş bitmap'e çizersin.
Hangi çizim araçları olacak, geri alma var mı, ne seviyedesin şu anda, neleri yaptın bilmiyoruz. Ama resmi bile okumadığına göre en başlardasın. Ben 1 saat önce ofisten döndüm, bir çok arkadaş da kendi projeleri vs. ile ilgileniyorlardır. Kimsenin projeyi 100% senin için yapmasını bekleme. Ama takıldığın yerleri söylersen yardım ederiz.