Skip to content

Instantly share code, notes, and snippets.

@MartinBspheroid
Last active March 6, 2020 15:33
Show Gist options
  • Save MartinBspheroid/2c1cc7196381ed3fd7deb8a9b7173b76 to your computer and use it in GitHub Desktop.
Save MartinBspheroid/2c1cc7196381ed3fd7deb8a9b7173b76 to your computer and use it in GitHub Desktop.

Revisions

  1. MartinBspheroid renamed this gist Mar 6, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. MartinBspheroid created this gist Mar 6, 2020.
    83 changes: 83 additions & 0 deletions CEF C# <-> JS
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,83 @@
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text.RegularExpressions;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Windows.Forms;
    using CefSharp.WinForms;
    using CefSharp;

    // This is the code for your desktop app.
    // Press Ctrl+F5 (or go to Debug > Start Without Debugging) to run your app.

    namespace DesktopApp1
    {
    public partial class Form1 : Form
    {
    public ChromiumWebBrowser browser;
    public class CallbackObj
    {
    public void showMessage(string msg)
    {
    // do whatever
    Console.WriteLine(msg);
    }
    public void getImage(string imgData)
    {

    using (Image image = Image.FromStream(new MemoryStream(Convert.FromBase64String(GetBase64FromJavaScriptImage(imgData)))))
    {
    // <parameters> : path / format
    image.Save("output.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    }

    /// From https://dejanstojanovic.net/aspnet/2018/january/javascript-base64-image-to-bitmap-in-c/

    public static String GetBase64FromJavaScriptImage(String imgData)
    {

    return Regex.Match(imgData, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;

    }
    }

    public void InitBrowser()
    {
    CefSettings settings = new CefSettings();
    settings.CefCommandLineArgs.Add("enable-media-stream", "1");
    Cef.Initialize(settings);
    CefSharpSettings.LegacyJavascriptBindingEnabled = true;

    browser = new ChromiumWebBrowser("localhost:3000");


    browser.JavascriptObjectRepository.Register("callbackObj", new CallbackObj(), isAsync: false, options: BindingOptions.DefaultBinder);

    this.Controls.Add(browser);
    browser.Dock = DockStyle.Fill;
    }
    public Form1()
    {
    InitializeComponent();
    InitBrowser();
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
    // Click on the link below to continue learning how to build a desktop app using WinForms!
    System.Diagnostics.Process.Start("http://aka.ms/dotnet-get-started-desktop");

    }

    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("Thanks!");
    }
    }
    }