Haberler:

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

Ana Menü

Aceminin C# sorulari

Başlatan z, 30 Mayıs 2012, 08: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.

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.

        private void button3_Click(object sender, EventArgs 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ı YapPerforms 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.

private void button1_Click(object sender, EventArgs e)
        {
            Rectangle bounds = pictureBox1.Bounds;
            Point location = pictureBox1.PointToScreen(Point.Empty);

            using(Bitmap myBitmap = new Bitmap(bounds.Width, bounds.Height))
            {
                using(Graphics g = Graphics.FromImage(myBitmap))
                {
                    g.CopyFromScreen(location, Point.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.

private void button2_Click(object sender, EventArgs e)
        {
            var myForm = Form.ActiveForm;
            using (var myBitmap = new Bitmap(myForm.Width, myForm.Height))
            {
                myForm.DrawToBitmap(myBitmap, new Rectangle(0, 0, myBitmap.Width, myBitmap.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, 17: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?

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

Mucit23


Mucit23

Selamlar. Konuyu hortlatacağım.

c# da küçük bir yazılım yapıyorum. USB den data almam gerekiyor belirli periyotlarla. Datanın ne zaman geleceği belli değil fakat ben forumdan çıkarken data gelirse yaptıım yazılım aşağıdaki gibi bir hata veriyor ve donuyor.



Bu hata nedir? Nasıl önlerim?