пробовал добавлять blur в Effect - но это не влияет на значения канвас. значения канвас проверяю на https://browserleaks.com/canvas в какую сторону необходимо копать? необходимо изменять именно средствами c# в окне wpf
дополнение код js, при выполнении которого меняется канвас:
var inj = function(){var data = {
'r': -3,
'g': 2,
'b': 4
}
const toBlob = HTMLCanvasElement.prototype.toBlob;
const toDataURL = HTMLCanvasElement.prototype.toDataURL;
HTMLCanvasElement.prototype.htGfd = function() {
const {width, height} = this;
const context = this.getContext('2d');
const matt = context.getImageData(0, 0, width, height);
for (let i = 0; i < height; i += 3) {
for (let j = 0; j < width; j += 3) {
const n = ((i * (width * 4)) + (j * 4));
matt.data[n + 0] = matt.data[n + 0] + data.r;
matt.data[n + 1] = matt.data[n + 1] + data.g;
matt.data[n + 2] = matt.data[n + 2] + data.b;
}
}
context.putImageData(matt, 0, 0);
};
Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
value: function() {
this.htGfd();
return toBlob.apply(this, arguments);
}
});
Object.defineProperty(HTMLCanvasElement.prototype, 'toDataURL', {
value: function() {
this.htGfd();
return toDataURL.apply(this, arguments);
}
});
}
inj();
Код на JS слишком сложен, чтобы так в лоб его портировать на C#, но можно пойти по пути динамического выполнения скриптов через window.execScript. Для начала, нужно добиться использования WebBrowser последней версии Internet Explorer, чтобы работал context.getImageData. Для этого необходимо в разделе реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
создать значение DWORD с именем текущего приложения и значением 0x2af9 (см. Internet Feature Controls - Browser Emulation)
Далее, к проекту нужно подключить ссылку на библиотеку MSHTML: Добавить ссылку -> COM -> Microsoft HTML Object Library.
Тогда мы можем с помощью вот такого кода выполнить скрипт на JS для добавления шума в canvas:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Runtime.InteropServices;
using mshtml;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
string templ = "var drawingCanvas = document.getElementById('{0}');";
string code = "var context = drawingCanvas.getContext('2d');var data = {'r': -30,'g': 200,'b': 40};var width = drawingCanvas.width;var height = drawingCanvas.height;var matt = context.getImageData(0, 0, width, height);for (var i = 0; i < height; i += 3) {for (var j = 0; j < width; j += 3) {var n = ((i * (width * 4)) + (j * 4));matt.data[n + 0] = matt.data[n + 0] + data.r;matt.data[n + 1] = matt.data[n + 1] + data.g;matt.data[n + 2] = matt.data[n + 2] + data.b;}}context.putImageData(matt, 0, 0);";
void AddNoise()
{
IHTMLDocument3 doc=null;
IHTMLDocument2 doc2 = null;
IHTMLWindow2 wnd = null;
IHTMLElementCollection coll = null;
try
{
doc = webbrowser.Document as IHTMLDocument3;
doc2 = webbrowser.Document as IHTMLDocument2;
wnd = doc2.parentWindow;
coll = doc.getElementsByTagName("canvas");
foreach (IHTMLElement elem in coll)
{
string script = String.Format(templ, elem.id) + code;
wnd.execScript(script);
Marshal.ReleaseComObject(elem);
}
}
finally
{
if (doc != null) Marshal.ReleaseComObject(doc);
if (doc2 != null) Marshal.ReleaseComObject(doc2);
if (wnd != null) Marshal.ReleaseComObject(wnd);
if (coll != null) Marshal.ReleaseComObject(coll);
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть таблица с полями: Дата начала приема врача Дата окончания приема врача (В этих полях храниться время на каждый день): Понедельник Вторник...
У меня скрипт рандомно должен менять модельку, и вот когда я начал писать код Понял что переменная типа floаt может содержать только лишь 1 значание,...
У меня есть переменная: public long money; В неё может вместиться максимум 1000000000000000000 или 1Q Мне этого не хватает, можно как-то её увеличить?
Всем приветМне нужно реализовать отрисовку квадрата с повторяющимися квадратиками по углам