Это чрезвычайно простая реализация стека изображений - вам, вероятно, потребуется оптимизировать его для изображений с высоким разрешением.
<h1>ImageStack</h1>
<div class="container-fluid">
<div class="row">@img</div>
<div class="row"><img src="@img" onmousewheel="@MouseWheel" /></div>
</div>
@functions
{
int imgNumber = 0;
string img => $"/images/explosion {imgNumber}.png";
Task MouseWheel(UIWheelEventArgs args)
{
imgNumber += Math.Sign(args.DeltaY);
if (imgNumber == 43) imgNumber = 0;
if (imgNumber == -1) imgNumber = 42;
return Task.CompletedTask;
}
}
DeltaY возвращает положительное или отрицательное число в зависимости от направления движения колесика мыши.
Я работаю с набором из 43 изображений с именем «взрыва N.png», где N варьируется от От 0 до 42.
Тег img имеет привязку «onmousewheel» к методу MouseWheel, который просто увеличивает или уменьшает imgNumber (и сохраняет его в диапазоне от 0 до 42).
img «src» связан со свойством «img», которое создает строку, указывающую на файл изображения под wwwroot.
Вам нужно будет настроить эту систему для любого способа хранения местоположений вашего изображения, который вам требуется.
В C # вы можете использовать целочисленные типы без знака, а затем <<
и >>
делать то, что вы ожидаете. Документация MSDN по операторам смены дает вам подробную информацию.
Поскольку Java не поддерживает целые числа без знака (кроме char
), этот дополнительный оператор стал необходим.
Прочитав это, я надеюсь, что мой вывод об использовании выглядит следующим образом. Если нет, то понимание приветствуется.
Java
i >>>= 1;
C #:
i = (int)((uint)i >> 1);
n >>> s в Java эквивалентно TripleShift (n, s), где:
private static long TripleShift(long n, int s)
{
if (n >= 0)
return n >> s;
return (n >> s) + (2 << ~s);
}
В C # нет оператора >>>. Но вы можете конвертировать ваши значения, такие как int, long, Int16, Int32, Int64, в unsigned uint, ulong, UInt16, UInt32, UInt64 и т. Д.
Вот пример.
private long getUnsignedRightShift(long value,int s)
{
return (long)((ulong)value >> s);
}
Для моих VB.Net людей
Предложенные выше ответы дадут вам исключения переполнения с Option Strict ON
Попробуйте это, например, -100 >>> 2
с вышеуказанными решениями :
Следующий код всегда работает для >>>
Function RShift3(ByVal a As Long, ByVal n As Integer) As Long
If a >= 0 Then
Return a >> n
Else
Return (a >> n) + (2 << (Not n))
End If
End Function
Java не имеет беззнакового сдвига влево ( <<<
), но в любом случае вы можете просто привести к uint
и shfit из там.
Например
(int)((uint)foo >> 2); // temporarily cast to uint, shift, then cast back to int