#c# #asp.net #image-processing #canvas
#c# #asp.net #обработка изображений #холст
Вопрос:
Я пытаюсь использовать Visual Studio C # для печати экрана, а затем сохранить снимок экрана в файл.
В настоящее время у меня возникают проблемы с чтением из буфера обмена.
Я попытался использовать обе следующие строки для сохранения снимка экрана в буфер обмена:
SendKeys.SendWait(" {PRTSC}");
SendKeys.SendWait("{PRTSC}");
Однако, когда я пытаюсь сохранить изображение, используя следующие строки, я получаю исключение с нулевой ссылкой.
Как решить эту проблему?
Мой код ниже
код разметки
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>Welcome to ASP.NET!
</h2>
1. Copy image data into clipboard or press Print Screen
<br />
2. Press Ctrl V (page/iframe must be focused):
<br />
<br />
<canvas style="border: 1px solid grey;" id="cc" width="200" height="200">
<script type="text/javascript">
var canvas = document.getElementById("cc");
var ctx = canvas.getContext("2d");
//=== Clipboard ===============================
window.addEventListener("paste", pasteHandler); //chrome
//handler
function pasteHandler(e) {
if (e.clipboardData == false) return false; //empty
var items = e.clipboardData.items;
if (items == undefined) return false;
for (var i = 0; i < items.length; i ) {
if (items[i].type.indexOf("image") == -1) continue; //not image
var blob = items[i].getAsFile();
var URLObj = window.URL || window.webkitURL;
var source = URLObj.createObjectURL(blob);
paste_createImage(source);
}
}
//draw pasted object
function paste_createImage(source) {
var pastedImage = new Image();
pastedImage.onload = function () {
ctx.drawImage(pastedImage, 0, 0);
}
pastedImage.src = source;
}
</script>
</canvas>
<br />
</div>
<div>
<asp:Button ID="btn" runat="server" OnClick="btn_Click" Text="Go" />
</div>
</form>
</body>
</html>
код за
protected void btn_Click(object sender, EventArgs e)
{
var path = new[] { @"C:UsersAsourcereposCopyPastepublic",
@"C:UsersAsourcereposCopyPastepublic" }.First(p => Directory.Exists(p));
var prefix = "css-social-media-icon-list";
var fileName = Enumerable.Range(1, 100)
.Select(n => Path.Combine(path, $"{prefix}-{n}.png"))
.First(p => !File.Exists(p));
Clipboard.GetImage().Save(fileName, ImageFormat.Png);
Clipboard.SetText($"![image](/public/{Path.GetFileName(fileName)})");
}
Ответ №1:
Я надеюсь, что это поможет… следуя этому примеру