Схема параметрического деления VHDL - Книга: Прототипирование FPGA на примерах VHDL, Понг Чу

Я попытался программно определить ограничение: установив размер холста, начиная с 35000, уступив 100, пока не будет найден действительный размер. На каждом шаге записывается правый нижний пиксель, а затем читается. Он работает - с осторожностью.

Скорость приемлема, если ширина или высота установлены на некоторое низкое значение (например, 10-200) следующим образом: get_max_canvas_size('height', 20).

Но если вызывается без ширины или высоты, например get_max_canvas_size(), созданный холст настолько велик, что чтение ОДИНОЧНОГО пиксельного цвета происходит очень медленно, а в IE вызывает серьезную зависание.

Если такой тест можно было бы сделать каким-то образом без чтения пиксель, скорость будет приемлемой.

Конечно, самый простой способ определить максимальный размер - это собственный способ запроса максимальной ширины и высоты. Но Canvas - это «живой стандарт», так может случиться, что он наступит.

http://jsfiddle.net/timo2012/tcg6363r/2/ (Помните! Ваш браузер может висеть!) [/ ​​G6]

if (!Date.now)
{
  Date.now = function now()
  {
    return new Date().getTime();
  };
}

var t0 = Date.now();
//var size = get_max_canvas_size('width', 200);
var size = get_max_canvas_size('height', 20);
//var size = get_max_canvas_size();
var t1 = Date.now();
var c = size.canvas;
delete size.canvas;
$('body').append('time: ' + (t1 - t0) + '
max size:' + JSON.stringify(size) + '
'); //$('body').append(c); function get_max_canvas_size(h_or_w, _size) { var c = document.createElement('canvas'); if (h_or_w == 'height') h = _size; else if (h_or_w == 'width') w = _size; else if (h_or_w && h_or_w !== 'width' && h_or_w !== 'height' || !window.CanvasRenderingContext2D) return { width: null, height: null }; var w, h; var size = 35000; var cnt = 0; if (h_or_w == 'height') w = size; else if (h_or_w == 'width') h = size; else { w = size; h = size; } if (!valid(w, h)) for (; size > 10; size -= 100) { cnt++; if (h_or_w == 'height') w = size; else if (h_or_w == 'width') h = size; else { w = size; h = size; } if (valid(w, h)) break; } return { width: w, height: h, iterations: cnt, canvas: c }; function valid(w, h) { var t0 = Date.now(); var color, p, ctx; c.width = w; c.height = h; if (c && c.getContext) ctx = c.getContext("2d"); if (ctx) { ctx.fillStyle = "#ff0000"; try { ctx.fillRect(w - 1, h - 1, 1, 1); p = ctx.getImageData(w - 1, h - 1, 1, 1).data; } catch (err) { console.log('err'); } if (p) color = p[0] + '' + p[1] + '' + p[2]; } var t1 = Date.now(); if (color == '25500') { console.log(w, h, true, t1 - t0); return true; } console.log(w, h, false, t1 - t0); return false; } }

1
задан mfro 25 January 2019 в 20:22
поделиться