- Katılım
- 6 Mayıs 2022
- Konular
- 48,291
- Mesajlar
- 48,601
- Tepkime puanı
- 75
- M2 Yaşı
- 3 yıl 11 ay 10 gün
- Trophy Puan
- 48
- M2 Yang
- 488,879
Resim ve görüntü hayatımızın her alanında her an gerçek günlük yaşantımızda veya sanal ortamlarda rastladığımız ve çağımızda dijital fotoğraf makinesi vb. cihazlarla yanımızda taşıdığımız bir olgu haline geldi. Ülkemizde satışlarında gerçekten bir patlama yapan dijital fotoğraf makinelerine ilişkin resim işleme kavrama temelleri ve aynı zamanda inanılmaz bir hızla gelişen görüntü tanıma yazılımların kullanım temelleri üzerinde ciddi bir biçimde durmak istiyorum. Ülkemizde üniversitelerin gerçekten üstünde durduğu bir kavramdan bahsediyoruz resim işleme( Çoğunlukla görüntü işleme diye anılır). Oyun stüdyolarının ve Holywoodun bir kare için bile harcadığı zaman ve makine gücünü temel alırsak günümüzde bu kadar öneme sahip olan temel resim işlemlerini irdelememiz kaçınılmaz oluyor. İlk önce piksel ne demek bunu açıklama gereksinimi duyuyorum:
Bir görüntünün en küçük yapıtaşıdır. 1*1 mm olacağı gibi, 5*5cm veya 10*10cm de olabilir genel bir standardı yoktur. Piksel herhangi bir ölçüte sahip olmadığı gibi birden çok pikselden meydana gelen topluluğa ise resim adını veriyoruz ( Biraz Lise ders kitaplarından fırlamİ bir cümleye benzese de bu tanımı belleğimize kazımak zorundayız). Yapacağımız işlemlerde GDI+ kullanılmıştır. Bu makalemizde ise dijital resim işleminin temeli olan RGB meselesine değineceğim. Bildiğiniz gibi:
R: Red (Kırmızı)
G: Green (Yeşil)
B: Blue (Mavi)
Dijital Resimler bu 3 renkten oluşur.
Ardından Form1 sınıfımızın kodlarına şunları ekleyelim:
Bitmap resim;
Forma çift tıklayıp şu kodu yazalım:
Eminim daha öncede aşina olduğunuz enabled özelliğini kapattık. İlk yapacağımız iş tahmin ettiğiniz gibi resim aç butonuna tıklamak olacaktır ve ardından bu butonun kodunu yazalım tabi ki de resim işleme ile tam olarak ilgisi olmasa da yinede can alıcı bir kod çünkü resmimizi Picture boxımıza bu buton sayesinde yerleştiriyoruz. Resim Aç butonumuzun kodu:
Burada standart bir kodlamayla resmimizi Bitmap sınıfından resim isimli nesnemizi seçtiğimiz dosyanın pathi(yani yolu) ile canlandırıyoruz. Bu kodun üstünde fazla durmayacağım.
isle isimli butonumuzun koduna gelecek olursak:
İlk öncelikle try-catch bloğumuz dikkatinizi çekmiş olmalı kod bloğumuzda bir sorun çıkarsa Hata mesajı bırakacak. x ve y adlı iki alanımız for döngümüzde piksellerimizi taramak için kullanacağız. Ardından resmin en ve boy yüksekliğini ele alıp her piksele ulaşıyoruz ve for döngümüzü buna göre çalıştırıyoruz. GetPixel() metodumuzla o anki piksel değerlerini Color sınıfından pixelColor adlı nesnemize atıyoruz. Ardından yine Color sınıfından newColor isimli bir nesne atayıp Color sınıfı üstünden statik olan FromArgb metodumuzu çalıştırıp aldığı 3 parametreye göre çeşitli atraksiyonlar yapıyoruz. Checkboxlarımızın durumuna göre basit bir if-else mantığı içinde (RGB değerlerinin En iyi anlatımının if-else mantığı içinde gözler önüne serilebileceği kanısındayım) newColorımızı canlandırıyoruz. İlk canlanmada piksel değerleri değişmediği için hiçbir checkboxa basılmamışsa resim orijinal değerlerini koruyacaktır aynı etkiyi RGB checkboxlarının üçünü birden seçtiğinizde de görebilirsiniz. Ardından değiştirdiğimiz pikseli SetPixel()metodu ile resmimizi piksel piksel değiştiriyor ve ardından piksellerimizi pictureboxımıza yerleştiriyoruz. resim.PixelFormat.ToString() kodunda ise labelımıza pikselimizin formatını atayabiliyoruz.
orjinal resim
red Seçilmiş
green seçilmiş
blue seçilmiş
red ve green seçilmiş
green ve blue seçilmiş
red ve blue seçilmiş
Son Olarak piksellere ulaşmamızın mantığını görmek için isle butonumuzun kodundaki x ve y alanlarımızı sırayla ilk önce for döngüsünün artım miktarında x+=3 ve y+=3 yapıp sırasıyla deneyelim ve böylece resmimize değişik efektler vermiş olabiliriz.
Bu değişimin getirdiği efekti size bırakıyorum. Son olarak bir buton ekleyelim ve resmimizi kaydetmek için bu butonumuzu kodlayalım. Kodumuz:
Bu kodumuzda görüntümüzü C:\ yoluna cikti.jpg ismiyle kaydediyoruz. Resim işlemenin daha doğrusu görüntü işlemenin temelini yani piksel ve RGB üstünde durduk umarım sizin için faydalı olmuştur. Sorularınızı ve yorumlarını bana email yoluyla iletebilirsiniz.
C# ile Resim İşlemeye Kısa Bir Bakış
Günümüzde yazılım projelerinde görsel işleme, kullanıcı arayüzü tasarımı, oyun geliştirme gibi alanlarda resim işleme becerisi giderek daha fazla önem kazanmaktadır. Özellikle Metin2 özel sunucu geliştirme süreçlerinde, görsel ögelerin doğrudan oyun deneyimine etkisi büyüktür. Bu bağlamda C# gibi güçlü ve esnek bir dil ile resim işleme yapmak, geliştiricilere büyük kolaylıklar sağlar. Bu yazıda, C# ile nasıl resim işlemeye başlanacağı, hangi sınıfların kullanılacağı ve bu işlemlerin Metin2 geliştirme sürecine nasıl entegre edilebileceği ele alınacaktır.
C# ve Resim İşleme Araçları
C#, .NET Framework ile birlikte gelen zengin grafik kütüphaneleri sayesinde resim işleme konusunda oldukça güçlüdür. Temel olarak System.Drawing namespace'i altında yer alan sınıflar ile resim okuma, yazma, manipülasyon ve çizim işlemleri yapılabilir. Ayrıca modern uygulamalarda Windows Forms veya WPF ile birlikte bu işlemler daha da genişletilebilir.
Resim Yükleme ve Gösterme
C# ile bir resmi yüklemek oldukça basittir. Bitmap sınıfı, temel resim nesnesi olarak kullanılır. Örneğin:
using System.Drawing;
var image = new Bitmap('ornek.jpg');
Bu şekilde bir resim belleğe alınabilir. Ardından bu resim üzerinde piksel seviyesinde değişiklikler yapılabilir veya farklı formatlarda tekrar yazdırılabilir. Bu özellikle Metin2 geliştirme sırasında özel arka planlar, simgeler veya karakter grafikleri üzerinde çalışırken oldukça faydalıdır.
Resim Manipülasyonu
Resim manipülasyonu, renk değiştirme, filtre uygulama, kırpma, ölçekleme gibi işlemleri içerir. C# ile bu işlemler genellikle Graphics sınıfı kullanılarak yapılır. Örneğin bir resmin parlaklığını veya kontrastını değiştirmek mümkündür. Bu tür işlemler, Metin2 oyununda özel efekt görselleri veya karakter stilleri üzerinde çalışırken oldukça kullanışlıdır.
Özel UI ve Arayüz Tasarımı
Metin2 özel sunucularında kullanıcı arayüzü özelleştirme büyük önem taşır. C# ile yapılan görsel işlemler, arayüz bileşenlerine dinamik olarak resim eklenebilmesini sağlar. Örneğin bir butonun üzerine özel bir resim yerleştirilebilir veya bir karakterin statüsünü gösteren özel bir ikon dinamik olarak güncellenebilir. Bu tür işlemler Py GUI veya Python GUI[/COORD] ile birlikte kullanıldığında çok daha güçlü sonuçlar verebilir.
Otomatik Paketleme ve Derleme Süreçlerinde Kullanımı
Geliştirilen sistemlerde görsel ögelerin doğru şekilde derlenip paketlenmesi, oyun sunucusunun stabilitesi için önemlidir. C# ile hazırlanan betikler sayesinde bu tür otomasyonlar kolayca sağlanabilir. Örneğin, belirli bir klasördeki tüm görselleri belirli bir formata dönüştürüp, pack dosyası içine ekleyen bir sistem yazılabilir. Bu, Metin2 geliştirme süreçlerinde zaman kazandıran önemli bir özelliktir.
Sonuç
C# ile resim işleme, hem genel yazılım projelerinde hem de Metin2 özel sunucu geliştirme süreçlerinde oldukça değerli bir beceridir. Doğru kullanıldığında kullanıcı deneyimini artırmak, görsel ögeleri yönetmek ve oyun içi sistemleri geliştirmek mümkün olur. Bu altyapı, game core geliştirme aşamasında da büyük kolaylık sağlar.
A Brief Look at Image Processing with C#
Today, image processing plays an increasingly important role in software projects involving visual processing, user interface design, game development, and more. Especially during Metin2 private server development processes, visual elements have a significant impact on the gaming experience. In this context, using a powerful and flexible language like C# for image processing provides great convenience to developers. This article will discuss how to get started with image processing using C#, which classes can be used, and how these operations can be integrated into the Metin2 development process.
C# and Image Processing Tools
Thanks to its rich graphics libraries included with the .NET Framework, C# is quite powerful in image processing. Using the classes under the System.Drawing namespace, you can read, write, manipulate, and draw images. Additionally, in modern applications, these operations can be extended further with Windows Forms or WPF.
Loading and Displaying Images
Loading an image in C# is straightforward. The Bitmap class serves as the basic image object. For example:
using System.Drawing;
var image = new Bitmap('example.jpg');
In this way, an image can be loaded into memory. Then, pixel-level modifications can be made or the image can be written again in different formats. This is particularly useful when working on custom backgrounds, icons, or character graphics during Metin2 development.
Image Manipulation
Image manipulation includes operations such as changing colors, applying filters, cropping, and scaling. These operations in C# are generally performed using the Graphics class. For example, it's possible to change the brightness or contrast of an image. Such operations are very useful when working on special effect visuals or character styles in Metin2 games.
Custom UI and Interface Design
Customizing the user interface is of great importance in Metin2 private servers. Visual operations done with C# allow dynamic addition of images to interface components. For example, a custom image can be placed over a button, or a custom icon showing a character's status can be dynamically updated. When used together with Py GUI or Python GUI, such operations can yield even more powerful results.
Usage in Automated Packaging and Compilation Processes
Correctly compiling and packaging visual elements is crucial for the stability of the game server in developed systems. Scripts prepared with C# can easily enable such automations. For example, a system can be written that converts all images in a specific folder to a certain format and adds them into a pack file. This is an important feature that saves time during Metin2 development processes.
Conclusion
Image processing with C# is a valuable skill both in general software projects and in Metin2 private server development. When used correctly, it allows enhancing user experience, managing visual elements, and developing in-game systems. This infrastructure also provides significant ease during game core development phases.
Bir görüntünün en küçük yapıtaşıdır. 1*1 mm olacağı gibi, 5*5cm veya 10*10cm de olabilir genel bir standardı yoktur. Piksel herhangi bir ölçüte sahip olmadığı gibi birden çok pikselden meydana gelen topluluğa ise resim adını veriyoruz ( Biraz Lise ders kitaplarından fırlamİ bir cümleye benzese de bu tanımı belleğimize kazımak zorundayız). Yapacağımız işlemlerde GDI+ kullanılmıştır. Bu makalemizde ise dijital resim işleminin temeli olan RGB meselesine değineceğim. Bildiğiniz gibi:
R: Red (Kırmızı)
G: Green (Yeşil)
B: Blue (Mavi)
Dijital Resimler bu 3 renkten oluşur.
Bitmap resim;
Forma çift tıklayıp şu kodu yazalım:
| isle.Enabled = false; |
Eminim daha öncede aşina olduğunuz enabled özelliğini kapattık. İlk yapacağımız iş tahmin ettiğiniz gibi resim aç butonuna tıklamak olacaktır ve ardından bu butonun kodunu yazalım tabi ki de resim işleme ile tam olarak ilgisi olmasa da yinede can alıcı bir kod çünkü resmimizi Picture boxımıza bu buton sayesinde yerleştiriyoruz. Resim Aç butonumuzun kodu:
| isle.Enabled = true; resimac.Enabled = false; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = "c:\\"; openFileDialog.Filter = "Bitmap Dosyaları (*.bmp)|*.bmp|Jpeg Dosyaları (*.jpg)|*.jpg"; openFileDialog.FilterIndex = 2; openFileDialog.RestoreDirectory = true; if (DialogResult.OK == openFileDialog.ShowDialog()) { resim = (Bitmap)Bitmap .FromFile(openFileDialog.FileName, false); } |
Burada standart bir kodlamayla resmimizi Bitmap sınıfından resim isimli nesnemizi seçtiğimiz dosyanın pathi(yani yolu) ile canlandırıyoruz. Bu kodun üstünde fazla durmayacağım.
isle isimli butonumuzun koduna gelecek olursak:
| resimac.Enabled = true; isle.Enabled = false; try { int x, y; for (x = 0; x < resim.Width; x++) { for (y = 0; y < resim.Height; y++) { Color pixelColor = resim.GetPixel(x, y); Color newColor=Color.FromArgb(pixelColor.R,pixelColor.G, pixelColor.B); if(checkBox1.Checked==true && checkBox2.Checked==true && checkBox3.Checked==true) newColor = Color.FromArgb(pixelColor.R, pixelColor.G, pixelColor.B); else if (checkBox1.Checked == true && checkBox2.Checked == true && checkBox3.Checked == false) newColor = Color.FromArgb(pixelColor.R, pixelColor.G, 0); else if (checkBox2.Checked == true && checkBox3.Checked == true && checkBox1.Checked == false) newColor = Color.FromArgb(0, pixelColor.G, pixelColor.B); else if (checkBox3.Checked == true && checkBox1.Checked == true && checkBox2.Checked == false) newColor = Color.FromArgb(pixelColor.R, 0, pixelColor.B); else if (checkBox1.Checked == true) newColor = Color.FromArgb(pixelColor.R, 0, 0); else if (checkBox2.Checked == true) newColor = Color.FromArgb(0, pixelColor.G, 0); else if (checkBox3.Checked == true) newColor = Color.FromArgb(0, 0, pixelColor.B); resim.SetPixel(x, y, newColor); } } // Görüntümüz pictureboxda gösteriliyor PictureBox1.Image = resim; // Piksel Formatları label1 de gösteriliyor label1.Text = resim.PixelFormat.ToString(); } catch { MessageBox.Show("Hata"); } |
İlk öncelikle try-catch bloğumuz dikkatinizi çekmiş olmalı kod bloğumuzda bir sorun çıkarsa Hata mesajı bırakacak. x ve y adlı iki alanımız for döngümüzde piksellerimizi taramak için kullanacağız. Ardından resmin en ve boy yüksekliğini ele alıp her piksele ulaşıyoruz ve for döngümüzü buna göre çalıştırıyoruz. GetPixel() metodumuzla o anki piksel değerlerini Color sınıfından pixelColor adlı nesnemize atıyoruz. Ardından yine Color sınıfından newColor isimli bir nesne atayıp Color sınıfı üstünden statik olan FromArgb metodumuzu çalıştırıp aldığı 3 parametreye göre çeşitli atraksiyonlar yapıyoruz. Checkboxlarımızın durumuna göre basit bir if-else mantığı içinde (RGB değerlerinin En iyi anlatımının if-else mantığı içinde gözler önüne serilebileceği kanısındayım) newColorımızı canlandırıyoruz. İlk canlanmada piksel değerleri değişmediği için hiçbir checkboxa basılmamışsa resim orijinal değerlerini koruyacaktır aynı etkiyi RGB checkboxlarının üçünü birden seçtiğinizde de görebilirsiniz. Ardından değiştirdiğimiz pikseli SetPixel()metodu ile resmimizi piksel piksel değiştiriyor ve ardından piksellerimizi pictureboxımıza yerleştiriyoruz. resim.PixelFormat.ToString() kodunda ise labelımıza pikselimizin formatını atayabiliyoruz.
orjinal resim
red Seçilmiş
green seçilmiş
blue seçilmiş
red ve green seçilmiş
green ve blue seçilmiş
red ve blue seçilmiş
Son Olarak piksellere ulaşmamızın mantığını görmek için isle butonumuzun kodundaki x ve y alanlarımızı sırayla ilk önce for döngüsünün artım miktarında x+=3 ve y+=3 yapıp sırasıyla deneyelim ve böylece resmimize değişik efektler vermiş olabiliriz.
| for (x = 0; x < resim.Width; x+=2) { for (y = 0; y < resim.Height; y+=2) { |
Bu değişimin getirdiği efekti size bırakıyorum. Son olarak bir buton ekleyelim ve resmimizi kaydetmek için bu butonumuzu kodlayalım. Kodumuz:
| resim.Save("C:\\cikti.jpg"); MessageBox.Show("Resim Kaydedildi!"); |
Bu kodumuzda görüntümüzü C:\ yoluna cikti.jpg ismiyle kaydediyoruz. Resim işlemenin daha doğrusu görüntü işlemenin temelini yani piksel ve RGB üstünde durduk umarım sizin için faydalı olmuştur. Sorularınızı ve yorumlarını bana email yoluyla iletebilirsiniz.
C# ile Resim İşlemeye Kısa Bir Bakış
Günümüzde yazılım projelerinde görsel işleme, kullanıcı arayüzü tasarımı, oyun geliştirme gibi alanlarda resim işleme becerisi giderek daha fazla önem kazanmaktadır. Özellikle Metin2 özel sunucu geliştirme süreçlerinde, görsel ögelerin doğrudan oyun deneyimine etkisi büyüktür. Bu bağlamda C# gibi güçlü ve esnek bir dil ile resim işleme yapmak, geliştiricilere büyük kolaylıklar sağlar. Bu yazıda, C# ile nasıl resim işlemeye başlanacağı, hangi sınıfların kullanılacağı ve bu işlemlerin Metin2 geliştirme sürecine nasıl entegre edilebileceği ele alınacaktır.
C# ve Resim İşleme Araçları
C#, .NET Framework ile birlikte gelen zengin grafik kütüphaneleri sayesinde resim işleme konusunda oldukça güçlüdür. Temel olarak System.Drawing namespace'i altında yer alan sınıflar ile resim okuma, yazma, manipülasyon ve çizim işlemleri yapılabilir. Ayrıca modern uygulamalarda Windows Forms veya WPF ile birlikte bu işlemler daha da genişletilebilir.
Resim Yükleme ve Gösterme
C# ile bir resmi yüklemek oldukça basittir. Bitmap sınıfı, temel resim nesnesi olarak kullanılır. Örneğin:
using System.Drawing;
var image = new Bitmap('ornek.jpg');
Bu şekilde bir resim belleğe alınabilir. Ardından bu resim üzerinde piksel seviyesinde değişiklikler yapılabilir veya farklı formatlarda tekrar yazdırılabilir. Bu özellikle Metin2 geliştirme sırasında özel arka planlar, simgeler veya karakter grafikleri üzerinde çalışırken oldukça faydalıdır.
Resim Manipülasyonu
Resim manipülasyonu, renk değiştirme, filtre uygulama, kırpma, ölçekleme gibi işlemleri içerir. C# ile bu işlemler genellikle Graphics sınıfı kullanılarak yapılır. Örneğin bir resmin parlaklığını veya kontrastını değiştirmek mümkündür. Bu tür işlemler, Metin2 oyununda özel efekt görselleri veya karakter stilleri üzerinde çalışırken oldukça kullanışlıdır.
Özel UI ve Arayüz Tasarımı
Metin2 özel sunucularında kullanıcı arayüzü özelleştirme büyük önem taşır. C# ile yapılan görsel işlemler, arayüz bileşenlerine dinamik olarak resim eklenebilmesini sağlar. Örneğin bir butonun üzerine özel bir resim yerleştirilebilir veya bir karakterin statüsünü gösteren özel bir ikon dinamik olarak güncellenebilir. Bu tür işlemler Py GUI veya Python GUI[/COORD] ile birlikte kullanıldığında çok daha güçlü sonuçlar verebilir.
Otomatik Paketleme ve Derleme Süreçlerinde Kullanımı
Geliştirilen sistemlerde görsel ögelerin doğru şekilde derlenip paketlenmesi, oyun sunucusunun stabilitesi için önemlidir. C# ile hazırlanan betikler sayesinde bu tür otomasyonlar kolayca sağlanabilir. Örneğin, belirli bir klasördeki tüm görselleri belirli bir formata dönüştürüp, pack dosyası içine ekleyen bir sistem yazılabilir. Bu, Metin2 geliştirme süreçlerinde zaman kazandıran önemli bir özelliktir.
Sonuç
C# ile resim işleme, hem genel yazılım projelerinde hem de Metin2 özel sunucu geliştirme süreçlerinde oldukça değerli bir beceridir. Doğru kullanıldığında kullanıcı deneyimini artırmak, görsel ögeleri yönetmek ve oyun içi sistemleri geliştirmek mümkün olur. Bu altyapı, game core geliştirme aşamasında da büyük kolaylık sağlar.
A Brief Look at Image Processing with C#
Today, image processing plays an increasingly important role in software projects involving visual processing, user interface design, game development, and more. Especially during Metin2 private server development processes, visual elements have a significant impact on the gaming experience. In this context, using a powerful and flexible language like C# for image processing provides great convenience to developers. This article will discuss how to get started with image processing using C#, which classes can be used, and how these operations can be integrated into the Metin2 development process.
C# and Image Processing Tools
Thanks to its rich graphics libraries included with the .NET Framework, C# is quite powerful in image processing. Using the classes under the System.Drawing namespace, you can read, write, manipulate, and draw images. Additionally, in modern applications, these operations can be extended further with Windows Forms or WPF.
Loading and Displaying Images
Loading an image in C# is straightforward. The Bitmap class serves as the basic image object. For example:
using System.Drawing;
var image = new Bitmap('example.jpg');
In this way, an image can be loaded into memory. Then, pixel-level modifications can be made or the image can be written again in different formats. This is particularly useful when working on custom backgrounds, icons, or character graphics during Metin2 development.
Image Manipulation
Image manipulation includes operations such as changing colors, applying filters, cropping, and scaling. These operations in C# are generally performed using the Graphics class. For example, it's possible to change the brightness or contrast of an image. Such operations are very useful when working on special effect visuals or character styles in Metin2 games.
Custom UI and Interface Design
Customizing the user interface is of great importance in Metin2 private servers. Visual operations done with C# allow dynamic addition of images to interface components. For example, a custom image can be placed over a button, or a custom icon showing a character's status can be dynamically updated. When used together with Py GUI or Python GUI, such operations can yield even more powerful results.
Usage in Automated Packaging and Compilation Processes
Correctly compiling and packaging visual elements is crucial for the stability of the game server in developed systems. Scripts prepared with C# can easily enable such automations. For example, a system can be written that converts all images in a specific folder to a certain format and adds them into a pack file. This is an important feature that saves time during Metin2 development processes.
Conclusion
Image processing with C# is a valuable skill both in general software projects and in Metin2 private server development. When used correctly, it allows enhancing user experience, managing visual elements, and developing in-game systems. This infrastructure also provides significant ease during game core development phases.
