Нарисуйте одиночный холст [дубликат]

Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:

object o = null;
DateTime d = (DateTime)o;

Он выкинет NullReferenceException в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.

Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:

" />

Здесь SelectedDate на самом деле является свойством - типа DateTime - типа Calendar Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...

31
задан Phrogz 22 July 2011 в 17:34
поделиться

4 ответа

Конечно, вы можете, и вам не нужны какие-либо смешные библиотеки или что-то еще, просто позвоните drawImage с холстом в качестве изображения.

Вот пример, когда я совмещаю два элемента холста на третий:

http://jsfiddle.net/bnwpS/878/

Конечно, вы можете сделать это всего двумя (один на другой ), но три - лучший пример.

Вы всегда можете изменить globalCompositeOperation, если хотите эффект XOR или что-то в этом роде.

38
ответ дан Simon Sarris 3 September 2018 в 15:19
поделиться

Я думаю, что вы ищете что-то вроде библиотеки pixastic ( Documentation ).

1
ответ дан Artjom B. 3 September 2018 в 15:19
поделиться

Если вы хотите «нормальный» режим смешивания

  • Убедитесь, что ваши элементы 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 }
    
  • . Пусть браузер автоматически выполняет смешение полупрозрачных областей поверх друг друга.

Если вам нужен «нормальный» режим смешивания на одном холсте

Если вы хотите простую маскировку, светлее или темнее

Если вы хотите, чтобы режимы наложения в стиле Photoshop

  • Я создал простую, легкую библиотеку с открытым исходным кодом для выполнения режимов смешивания в стиле Photoshop из одного контекста HTML Canvas в другой: context-blender . Вот пример использования:
    // Might be an 'offscreen' canvas
    var over  = someCanvas.getContext('2d');
    var under = anotherCanvas.getContext('2d');
    
    over.blendOnto( under, 'screen', {destX:30,destY:15} );
    
    Для получения дополнительной информации см. README .
13
ответ дан MrMakeIt 3 September 2018 в 15:19
поделиться

Вы можете использовать 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 тени на экранном холсте и нарисовал его поверх основного холста с прозрачностью, выглядел довольно аккуратно)

0
ответ дан Rickard 3 September 2018 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: