Вам не нужен макет "_" переменная. Можно непосредственно создать "глобальные" переменные при помощи объема объекта окна:
window["foo"] = "bar";
alert(foo); // Gives "bar"
Вот еще немного точек:
Вот то, что я придумал:
function destructure(dest, src) {
dest = dest.split(",");
for (var i = 0; i < src.length; i++) {
window[dest[i]] = src[i];
}
}
var arr = [42, 66];
destructure("var1,var2", arr);
alert(var1); // Gives 42
alert(var2); // Gives 66
Спасибо, что подтвердили, что опубликованный мной код работает. Это помогло мне изолировать мою проблему. Я чувствую себя глупо. В моем фактическом коде была проверка формата изображения перед установкой encoderParams
, но в нем была ошибка:
if (sourceFormat == ImageFormat.Jpeg) {
// set encoderParams here
Я обнаружил, что указанное выше условие всегда было ложным, поэтому encoderParams
не было установлено. Исправить было просто:
if (sourceFormat.Guid == ImageFormat.Jpeg.Guid) {
При использовании любого метода декомпрессии изображения, поворота и сжатия вы получите потерю качества.
Формат JPEG сжимает информацию о цвете в квадратах размером 2x2 пикселя, получая среднее значение цвет для представления всех четырех пикселей, поэтому, если ширина и высота вашего изображения делятся на два, вы потеряете меньшее качество, поскольку большая часть информации, удаляемой при сжатии, является информацией, которая была интерполирована при распаковке.
Аналогичным образом сжимается информация о яркости. в квадратах размером 8x8 пикселей, поэтому, если ваши ширина и высота делятся на восемь, сетка выровняется после поворота изображения, и вы потеряете меньше актуальной информации.
Чтобы выполнить поворот без потерь, вы должны использовать совершенно другой метод,чтение файла JPEG и изменение порядка и поворота каждого квадрата информации так, чтобы оно формировало повернутое изображение без его распаковки и повторного сжатия.