Как отобразить быстро обновляющие изображения без выделения памяти большой емкости?

Вам необходимо назначить уникальный идентификатор, такой как class или id, чтобы конкретно сделать первый тег выбора readonly, а не оба ... например, здесь я использую тег и селектор атрибута для выбора теги с атрибутом readonly

select[readonly]:-moz-read-only {
  /* For Firefox */
  pointer-events: none;
}

select[readonly]:read-only {
  pointer-events: none;
}
<p> ACCEPTED </p>
<select readonly>
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>
<br>
<p> UNACCEPTED : selector also applying here </p>
<select>
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>

Используемый вами селектор является селектором тегов и будет выбирать любой тег select и включите его только для чтения.


Добавление некоторых деталей на основе комментариев,

Вы можете отключить фокус вкладки, используя атрибут tabindex со значением, установленным в false в теге select

[ 1117] Кроме того, вы не должны полагаться на данные, передаваемые со стороны клиента, если они предназначены только для чтения. В бэкэнде должна быть соответствующая проверка, которая не позволит пользователю передавать ложные или вредоносные данные. Независимо от того, что вы используете, простое HTML-решение CSS, как описано выше, или отключение ключей с помощью JavaScript, вы не можете запретить пользователю не изменять значение тега.

13
задан Will Eddins 1 May 2009 в 17:10
поделиться

2 ответа

Вот некоторый код, который я написал * для псевдонима (совместного использования памяти) между WPF BitmapSource и GDI Bitmap (для моего собственного проекта)

Очевидно, вам нужно настроить его для своего собственные нужды, скорее всего, в конце концов получится менее «хакерское» чувство.

class AliasedBitmapSource : BitmapSource {
    private Bitmap source;
    public AliasedBitmapSource(Bitmap source) {
        this.source = source;
        this.pixelHeight = source.Height;
        this.pixelWidth = source.Width;
        this.dpiX = source.HorizontalResolution;
        this.dpiY = source.VerticalResolution;
    }

    public override event EventHandler DownloadCompleted;
    public override event EventHandler<ExceptionEventArgs> DownloadFailed;
    public override event EventHandler<ExceptionEventArgs> DecodeFailed;

    protected override Freezable CreateInstanceCore() {
        throw new NotImplementedException();
    }

    private readonly double dpiX;
    public override double DpiX {
        get {
            return dpiX;
        }
    }

    private readonly double dpiY;
    public override double DpiY {
        get {
            return dpiY;
        }
    }

    private readonly int pixelHeight;
    public override int PixelHeight {
        get {
            return pixelHeight;
        }
    }

    private readonly int pixelWidth;
    public override int PixelWidth {
        get {
            return pixelWidth;
        }
    }

    public override System.Windows.Media.PixelFormat Format {
        get {
            return PixelFormats.Bgra32;
        }
    }

    public override BitmapPalette Palette {
        get {
            return null;
        }
    }

    public unsafe override void CopyPixels(Int32Rect sourceRect, Array pixels, int stride, int offset) {
        BitmapData sourceData = source.LockBits(
        sourceRect.ToRectangle(),
        ImageLockMode.ReadWrite,
        System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        fixed (byte* _ptr = &((byte[])pixels)[0]) {
            byte* dstptr = _ptr;
            byte* srcptr = (byte*)sourceData.Scan0;

            for (int i = 0; i < pixels.Length; ++i) {
                *dstptr = *srcptr;
                ++dstptr;
                ++srcptr;
            }
        }

        source.UnlockBits(sourceData);
    }
}

public static class Extensions {
    public static Rectangle ToRectangle(this Int32Rect me) {
        return new Rectangle(
        me.X,
        me.Y,
        me.Width,
        me.Height);
    }

    public static Int32Rect ToInt32Rect(this Rectangle me) {
        return new Int32Rect(
        me.X,
        me.Y,
        me.Width,
        me.Height);
    }
}

* под «писал», я имею в виду «бросили вместе за 10 минут»

9
ответ дан 1 December 2019 в 22:40
поделиться

Если вы используете последние биты WPF, посмотрите WriteableBitmap , вам придется проделайте большую часть работы, но у вас будут действительно быстрые обновления.

Сделайте быстрый гугл, и вы получите несколько образцов.

12
ответ дан 1 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

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