using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
namespace zz_winsign
{
///
/// Interaktionslogik für SignControl.xaml
///
public class imageclass
{
public string tgnummer { get; set; }
public string b64 { get; set; }
}
public partial class SignControl : UserControl
{
public string filepath { get; set; } = "";
public string environment { get; set; }="";
public string IgnoreI { get; set; } = "";
public string RestURI { get; set; } = "";
public SignControl()
{
InitializeComponent();
inkCanvas.DefaultDrawingAttributes.FitToCurve = true;
inkCanvas.DefaultDrawingAttributes.IgnorePressure = false;
inkCanvas.DefaultDrawingAttributes.Width = 3;
inkCanvas.DefaultDrawingAttributes.Height = 3;
inkCanvas.DefaultDrawingAttributes.Color = Colors.Navy;
inkCanvas.StylusDown += InkCanvas_StylusDown;
inkCanvas.StylusMove += InkCanvas_StylusMove;
//suppress mouse and touch input (only pen)
inkCanvas.PreviewMouseDown += (s, e) => {
e.Handled = true;
outputBlock.Text = "Nur Stift-Input möglich!";
outputBlock.Foreground = Brushes.White;
};
inkCanvas.PreviewMouseUp += (s, e) => {
e.Handled = true;
outputBlock.Text = "Nur Stift-Input möglich!";
outputBlock.Foreground = Brushes.Black;
};
inkCanvas.PreviewTouchDown += (s, e) => {
e.Handled = true;
outputBlock.Text = "Nur Stift-Input möglich!";
outputBlock.Foreground = Brushes.White;
};
inkCanvas.PreviewTouchUp += (s, e) => {
e.Handled = true;
outputBlock.Text = "Nur Stift-Input möglich!";
outputBlock.Foreground = Brushes.Black;
};
}
private void InkCanvas_StylusDown(object sender, StylusDownEventArgs e)
{
ShowStylusPoints(e.GetStylusPoints(inkCanvas));
}
private void InkCanvas_StylusMove(object sender, StylusEventArgs e)
{
ShowStylusPoints(e.GetStylusPoints(inkCanvas));
}
private void ShowStylusPoints(StylusPointCollection points)
{
var sb = new StringBuilder();
foreach (StylusPoint pt in points)
{
sb.AppendLine($"X: {pt.X:0}, Y: {pt.Y:0}, Pressure: {pt.PressureFactor:0.00}");
}
outputBlock.Text = sb.ToString();
}
private void SaveInkCanvasAsJpg(InkCanvas inkCanvas, string filename)
{
// 1. Größe bestimmen
Size size = new Size(inkCanvas.ActualWidth, inkCanvas.ActualHeight);
inkCanvas.Measure(size);
inkCanvas.Arrange(new Rect(size));
// 2. RenderTargetBitmap erstellen
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
(int)size.Width,
(int)size.Height,
96d, // DPI-Wert
96d, // DPI-Wert
PixelFormats.Default);
renderBitmap.Render(inkCanvas);
// 3. Encoder erstellen und Frame hinzufügen
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = 95;
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
// 4. In Datei speichern
using (FileStream file = File.Create(filename))
{
encoder.Save(file);
}
}
private string get_tg(string tguser)
{
if (IgnoreI.ToString().ToLower() == "true")
{
tguser = tguser.Replace("I", "");
tguser = tguser.Replace("i", "");
}
return tguser;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string SaveImageFolder = filepath;
string SaveImageFilename = SaveImageFolder + "signatureimage.jpg";
SaveInkCanvasAsJpg(inkCanvas, SaveImageFilename);
byte[] imageArray = System.IO.File.ReadAllBytes(SaveImageFilename);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
string URL = RestURI;
URL = URL + "API/SaveSignature";
string tguser = get_tg(Environment.UserName);
string json = "{\"tgnummer\":\"" + tguser + "\", \"b64\":\"" + base64ImageRepresentation + "\"}";
using (var client = new HttpClient())
{
var token = "";
if (environment == "INT") { token = "ecJVgQbmauycFRw5Lz6hB0dJb6GYCePckr2kw3g+xLkbS+h6oxR0iPMFkP3uXpFq7luWAdXrEWs1kmR4Pan5rN+bgwm2YjdPl56Et/Z5hIr+QJhPMB8lmNO1oJytu3GS"; }
if (environment == "PROD") { token = "U/atwlLxw8w3RRK3iRhIidhhz/MR+dgQaysvuWjLyjjy9G3edGldU1zUEATZMZ5v1wPvA5ArDqAGH4xsqoyEP+w6k5Ij0Rh47ifP/8iN0jE418ECp9TbOX8Vrg6JyGFkfLjIAk+uQQC18dg4wGnOwKEJJlKrGCYeVVwwsOBtsoM="; }
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = client.PostAsync(URL, content);
outputBlock.Text = response.Result.StatusCode.ToString();
}
System.IO.File.Delete(SaveImageFilename);
}
private void DelButton_Click(object sender, RoutedEventArgs e)
{
inkCanvas.Strokes.Clear();
}
private void OnOffSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
if (OnOffSlider.Value == 0)
{
inkCanvas.DefaultDrawingAttributes.Width = 2;
inkCanvas.DefaultDrawingAttributes.Height = 2;
}
else
{
inkCanvas.DefaultDrawingAttributes.Width = 3;
inkCanvas.DefaultDrawingAttributes.Height = 3;
}
}
}
}