folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# Socket İle Byte[] Aktarımı



C# Socket İle Byte[] Aktarımı

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    esinti
    esinti's avatar
    Kayıt Tarihi: 27/Ağustos/2015
    Erkek

    Merhaba Arkadaşlar,

     

    Şimdi projemde client pc nin ekranını server yardımıyda admin pc ye aktarmak istiyorum şimdilik server a aktardım görüntüyü ama işin başındayken şunu merak ediyorum ScreenShot aldıktan direk göndermeden önce ne yapmalıyım malum network kullanımını düşünmem lazım ekranın kalitesini düşürmeyi planlıyorum ama başka ne yapabilirim yada en iyi yol hangisidir acaba.

    yardımlarınız için şimdiden teşekkürler.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Hocam en kolayı screenshotu sıkıştıracan tabi, normal bi ekran görüntüsü 5MB falan dır. PNG yapabilirsin. 250 kblara kadar iner.

    Ama asıl yapman gereken bir önceki ekran görüntüsü ile farkı almak. bunu her pixelin RGB değerlerini önceki ile xorlayarak yapabilirsin ama c# ı kasar bu,  native winapi kullanıyor olsan Bitblt parametreleri ile bunu yapabilirdin. Bence GetDesktopWindow() GetDc, Bitblt apilerini çağırarak yapmalısın.

    Önceki ekran görüntüsüyle farkı almanın bir başka yolu da genelde webcam iletişiminde kullanılan motionjpeg sıkıştırması, resimlerde küçük kayıpların önemi olmadığından bu daha iyi olurdu. fakat bunu önceden kullanmadım libraryleri free olarak varmı bilmiorum.

     

     

    HolyOne tarafından 04/Haz/14 12:49 tarihinde düzenlenmiştir

    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    babayarisi
    babayarisi's avatar
    Kayıt Tarihi: 17/Mart/2014
    Erkek

    hocam c# dan anlamam ama ekran görüntüsünü resim formatında değilde  base64 ile encode edip text formatında transfer edersen serverda data:image ile yazdırırsan epey bişeyden kar edebilirsin gibi görünüyo.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    holy nin dediğine ek olarak sıkıştırma için gzip kullanılabilir. sonra bunu byte dizisine convert edip yollayacaksın. kendine uygun bir sıkıştırma algoritması da geliştirebilirsin ama bunlar biraz daha ileri seviye konular. benim daha önce gördüğüm kodlarda sıkıştırma için gzip kullanılıyor (daha çok java da),

    yine holy nin bahsettiği api lerle ekran görüntüsü alabilirsin ama c# da api kullanmasına girmeden de yapabilirsin. okuduğum kadarıyla .net framework 4.0 da bu tarz api kullanımı çalışmıyormuş 

     

    Unfortunately, this overload has a critical bug that prevents this from working. It doesn't validate the value properly. Still not fixed in .NET 4.0. There is no other good fix but fall back to using P/Invoke to make the screen shot. Here's an example:

     

    Not : api detayları için pinvoke.net sitesini kullanabilirsin (holy nin bahsettiği api leri araştırabilirsin, örnek kodlar, açıklamalar mevcut orda)

     

    şu tarz bi kod ile bitmap elde edersin

     

    private static Bitmap GetScreenShot()
    {
        Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
     
        using (Graphics graphics = Graphics.FromImage(bitmap))
        {
            graphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
        }
     
        return bitmap;
    }

     

    sonra 

    byte[] arr = resim.ToByteArray(ImageFormat.Bmp);

     

    şeklinde byte dizisine dönderirsin.. bunu da gzip ile sıkıştırırsan istediğini elde edersin diye düşünüyorum. 

     

    ama amacın sık sık resim yollamak ise bu yol performanslı değildir, onun için de teamviewer ın mantığını kullanmak gerekecek. Çekilen tüm resmi tarayıp değişen bölgenin bilgisini yollayacaksın.  Bu sayede tüm resmi yollamaktan kurtulmuş olursun. Bunla ilgili open source projeler mevcut onlara bakabilirsin.

     

    kolay gelsin


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1065 Toplam Mesaj: 4