Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:
object o = null;
DateTime d = (DateTime)o;
Он выкинет NullReferenceException
в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.
Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:
" />
Здесь SelectedDate
на самом деле является свойством - типа DateTime
- типа Calendar
Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException
, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...
Конечно, вы можете, и вам не нужны какие-либо смешные библиотеки или что-то еще, просто позвоните drawImage
с холстом в качестве изображения.
Вот пример, когда я совмещаю два элемента холста на третий:
http://jsfiddle.net/bnwpS/878/
Конечно, вы можете сделать это всего двумя (один на другой ), но три - лучший пример.
Вы всегда можете изменить globalCompositeOperation
, если хотите эффект XOR или что-то в этом роде.
Я думаю, что вы ищете что-то вроде библиотеки pixastic ( Documentation ).
canvas
не имеют фона, указанного в CSS. Это оставит их прозрачными. canvas
элементы поверх друг друга. Например, оберните их все в <div class="canvas-layers">
, а затем используйте CSS, например: /* Set to the same width/height as the canvases */
.canvas-layers { position:relative; width:400px; height:300px }
.canvas-layers canvas { position:absolute; top:0; left:0 }
drawImage
с одним холстом в качестве исходного изображения. Например, см. https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Using_images#Using_other_canvas_elements globalCompositeOperation
контекста canvas и используйте drawImage
с одним холстом в качестве источника. См. Пример здесь: https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html // Might be an 'offscreen' canvas
var over = someCanvas.getContext('2d');
var under = anotherCanvas.getContext('2d');
over.blendOnto( under, 'screen', {destX:30,destY:15} );
Для получения дополнительной информации см. README . Вы можете использовать css позицию 2 (или больше) холстов друг над другом и позволить каждому работать как слой. Im not sure Точно, как это сделать с помощью css, но я сделал что-то подобное, должен иметь холсты над eachother, один для 2d-контента и один для webgl, и пользователь может легко переключаться между ними
<div height="640" style="position: absolute;">
<canvas width="640" style="position: absolute;visibility: hidden;" height="640" tabindex="1"></canvas>
<canvas width="640" height="640" style="visibility: hidden;position: absolute;"></canvas>
</div>
Я думаю, что код не является пропуском proff и не прав, но он работает. Надеюсь это поможет.
Если я не использую обходное решение, которое вы упомянули. (Я фактически сделал приложение, подобное тому, где я нарисовал 2d тени на экранном холсте и нарисовал его поверх основного холста с прозрачностью, выглядел довольно аккуратно)