У меня есть рабочий WebApi, который поставляет мне PNG-изображение (проверено в Fiddler). Однако, когда я хочу нарисовать изображение на холсте HTML, ничего не происходит.Невозможно нарисовать изображение из WebApi на Canvas
Web код апи:
public HttpResponseMessage GetInitialMap(int height, int width)
{
var chart = RmdbHelper.GetInitialChart(height, width);
MemoryStream memoryStream = new MemoryStream();
chart.Save(memoryStream, ImageFormat.Png);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(memoryStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
response.StatusCode = HttpStatusCode.OK;
return response;
}
Это Javascript и JQuery код вызвать изображение и попробуйте нарисовать
var NavChart = function() {
var ctx,
chartHeight,
chartWidth,
// other stuff
renderBackgroundMap = function() {
$.get("../api/NauticalMaps/GetInitialMap?height" + chartHeight + "&width=" + chartWidth)
.done(function (bgImage) {
var background = new Image(chartWidth, chartHeight);
background.src = bgImage;
ctx.drawImage(background, 0, 0);
})
.fail(function (error) {
showError("...");
});
};
initialize = function(canvasId) {
var canvas = document.getElementById(canvasId);
chartHeight = canvas.getAttribute("height");
chartWidth = canvas.getAttribute("width");
ctx = canvas.getContext("2d");
render();
};
return {
initialize: initialize
};
};
На странице HTML я создаю объект NavChart и вызовите функцию инициализации. С тех пор проблем нет. Fiddler показывает мне, что вызов сделан, и он возвращает изображение.
HTML и вызовите:
<div class="row">
<canvas id="zeekaart" height="550" width="1150" style="border: 1px solid lightgrey"></canvas>
</div>
<script>
var nav = new NavChart();
nav.initialize("zeekaart");
</script>
Кажется, что
var background = new Image(chartWidth, chartHeight);
background.src = bgImage;
.src ожидает URL или назначения. Но с использованием
.done(function (bgImage) {
ctx.drawImage(bgImage, 0, 0);
})
также не работает.
Любые идеи? Я не хочу записывать все изображения в временную папку на сервере и очищать их по истечении заданного времени.
вы должны дождаться загрузки img перед тем, как нарисовать его на холсте. – Kaiido
Как подождать?Я думал, что изображение было «загружено», когда вы входите в «сделанную» функцию – Jeankes
. Обещание не разрешено, но чтобы дождаться загрузки изображения, вам просто нужно использовать обработчик onload. – Kaiido