25 Mayıs 2018, 11:01:18

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


Aceminin C# sorulari

Başlatan z, 30 Mayıs 2012, 11:19:05

vitruvius

Tam olarak anlamadım. Yapmak istediğiniz şey; mesela button1'a basınca chart1'e bir dosyadan okuduğum sıcaklık verisini çizsin. Button2'ye basınca da yine aynı chart1'e başka bir dosyadan okuyacağım gerilim değerini çizsin, gibi bir şey mi?

chart1.refresh() methodunu kullanabilirsiniz tekrar çizdirmek için.

Mucit23

Yok hocam öyle değil

buton_1 e basınca chart1 e txt dosyasindan veriyi okuyup basıyorum. Sonra başka bir txt dosyası açıyorum.  Tekrar buton_1 e basınca yeni dosyadaki veriler charta basilmiyor.

vitruvius

Değerleri güncelledikten sonra chart1.refresh() methodunu kullanmayı denedin mi? Bu method chart'ın yeni değerlerle tekrar çizilmesine zorlar.

Yada öncesinde chart'ı aşağıdaki gibi temizleyebilirsin.

Kod Seç
foreach(var series in chart1.Series
{
    
series.Points.Clear();
}


Bunlar da olmazsa sorununu gösteren minimum uzunlukta bir projeyi yollarsan akşam bakarım.

Mucit23

Hocam eski noktaları silmek işe yaradı. Teşekkür ederim. Yeni veri göndermeden önce eskisini siliyorum verdiğiniz kod ile. Tekrardan teşekkürler.

Mucit23

Bir soru daha sormak istiyorum.

C# da formun ekran görüntüsünü resim olarak kaydetmek istiyorum. Biraz araştırdım internette ekran görüntüsü alan birkaç yazı buldum. Denedim yaptımda aslında ama kordinatlar tam uyuşuyor. Farklı yerlerin ekran görüntüsü alınıyor.

Ekran görüntüsü alıp kaydetmek için aşağıdaki kodları kullandım. Butona basınca Screenshot adında bir bitmap nesnesi oluşturuluyor. Ardından GFX.CopyFromScreen fonksiyonu ile ekran görüntüsü alınıyor. Yalnız parametrelerde yanlışlık olsa gerekki yanlış kordinatlar alınıyor.

Kod Seç
        private void button3_Click(object senderEventArgs e)
        {
            
//Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height
            
Bitmap Screenshot = new Bitmap(Form1.ActiveForm.Width,Form1.ActiveForm.Height);

            
Graphics GFX Graphics.FromImage(Screenshot);

            
//Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size
            
GFX.CopyFromScreen(Form1.ActiveForm.Location.X,Form1.ActiveForm.Location.Y,0,0,Form1.ActiveForm.Size);

            
SaveFileDialog resim = new SaveFileDialog();
            
resim.ShowDialog();

            
Screenshot.Save(resim.FileName ".jpg");

        }


Bu  GFX.CopyFromScreen fonksiyonuna gönderilen parametreler nasıl olmalı?

Karamel

https://www.youtube.com/watch?v=DJCKMMDcUI0

sanirim bu isinizi gorebilir hocam? (muzigin sesi rahatsizlik verebilir)

vitruvius

CopyFromScreen e bakarsan gözden kaçan ama çok önemli bir detay var.

AlıntıPerforms a bit-block transfer of color data, corresponding to a rectangle of pixels, from the screen to the drawing surface of the Graphics.


Yani bu methoda aktaracağın parametreler senin bilgisayar ekranındaki koordinatlar olmalı, formdaki değil.

Peki, form'daki koordinatımın ekranda neresi olduğunu nasıl bulacağım dersen;

PointToScreen methodu var.

Diyelim ki formumuzda bir picturebox olsun ve butona bastığımızda bunun ekran görüntüsünü almak isteyelim.

İlk satırda picturebox'ın sınırlarını bulduktan sonra ikinci satırda da bilgisayar ekranındaki koordinatlarını buluyoruz. Gerisi resim alma ve kaydetme.

Kod Seç
private void button1_Click(object senderEventArgs e)
        {
            
Rectangle bounds pictureBox1.Bounds;
            
Point location pictureBox1.PointToScreen(Point.Empty);

            
using(Bitmap myBitmap = new Bitmap(bounds.Widthbounds.Height))
            {
                
using(Graphics g Graphics.FromImage(myBitmap))
                {
                    
g.CopyFromScreen(locationPoint.Empty, bounds.Size);
                }
                
myBitmap.Save("test.jpg"System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }


Mucit23

Selamlar. Şimdi videoya bakıyordum.

Hocam bende picturebox yok. Doğrudan hafızada bir bitmap oluşturup o bitmap'ı kaydetmem gerekir.

Anladığım kadarıyla copyfromscren sadece  bilgisayar ekranında işe yarıyor. Dolayısıyla formun bilgisayar ekranındaki  kordinatlarını bulmam gerek. PointToScreen fonksiyonunu form için nasıl kullanırım?

Karamel

ustadim. size tam olarak ne lazim? videodaki adam. new bitmap olusturarak form un screenshot ini aliyor iste?

vitruvius

Picturebox'lı örnek vermemin sebebi belli bir alandaki görüntüyü yakalamak istersen diyeydi. Form görüntüsünü yakalamak istiyorsan Control.DrawToBitmap'i kullanabilirsin.

Kod Seç
private void button2_Click(object senderEventArgs e)
        {
            var 
myForm Form.ActiveForm;
            
using (var myBitmap = new Bitmap(myForm.WidthmyForm.Height))
            {
                
myForm.DrawToBitmap(myBitmap, new Rectangle(00myBitmap.WidthmyBitmap.Height));
                
myBitmap.Save("form.jpg"System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }

Mucit23

PictureBox'ı anlamamıştım aslında ama şimdi olayı anladım gibi.

Teşekkürler @vitruvius, Teşekkürler @Karamel

Mucit23

Selamlar

c# ile ilgili ufak bir sorum olacak
C# 'da  DateTime.Now.ToLongTimeString(); yapısı ile string olarak "21:14:32" formatında anlık saat bilgisini alıyorum. Ben bunu byte byte almak istiyorum. Örneğin Saat bilgisini 1 Byte, Dakika bilgisini 1 Byte, ve Saniye bilgini 1 Byte olacak şekilde nasıl alabilirim?

Hadi

Alıntı yapılan: Mucit23 - 09 Ağustos 2017, 20:15:46
Selamlar

c# ile ilgili ufak bir sorum olacak
C# 'da  DateTime.Now.ToLongTimeString(); yapısı ile string olarak "21:14:32" formatında anlık saat bilgisini alıyorum. Ben bunu byte byte almak istiyorum. Örneğin Saat bilgisini 1 Byte, Dakika bilgisini 1 Byte, ve Saniye bilgini 1 Byte olacak şekilde nasıl alabilirim?


Kod Seç

byte saat   
Convert.ToByte(DateTime.Now.Hour);
byte dakika Convert.ToByte(DateTime.Now.Minute);
byte saniye Convert.ToByte(DateTime.Now.Second);

Mucit23