Вращение JPEGs в.NET с минимальной потерей качества

Вам не нужен макет "_" переменная. Можно непосредственно создать "глобальные" переменные при помощи объема объекта окна:

window["foo"] = "bar";
alert(foo); // Gives "bar"

Вот еще немного точек:

  • я не назвал бы эту функцию, "присваиваются", потому что это - слишком универсальный термин.
  • , Чтобы более тесно напомнить синтаксис JS 1.7 я сделал бы функциональное взятие местом назначения как первый аргумент и источник как второй аргумент.
  • Используя литерал объектов для передачи целевых переменных прохладно, но может быть перепутан с JS 1.7 destructuring, где место назначения является на самом деле объектом и не массивом. Я предпочитаю просто использовать разграниченный список запятой имен переменной как строка.

Вот то, что я придумал:

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
7
задан Mike Henry 27 July 2009 в 07:52
поделиться

2 ответа

Спасибо, что подтвердили, что опубликованный мной код работает. Это помогло мне изолировать мою проблему. Я чувствую себя глупо. В моем фактическом коде была проверка формата изображения перед установкой encoderParams , но в нем была ошибка:

if (sourceFormat == ImageFormat.Jpeg) {
    // set encoderParams here

Я обнаружил, что указанное выше условие всегда было ложным, поэтому encoderParams не было установлено. Исправить было просто:

if (sourceFormat.Guid == ImageFormat.Jpeg.Guid) {
2
ответ дан 7 December 2019 в 14:36
поделиться

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

Формат JPEG сжимает информацию о цвете в квадратах размером 2x2 пикселя, получая среднее значение цвет для представления всех четырех пикселей, поэтому, если ширина и высота вашего изображения делятся на два, вы потеряете меньшее качество, поскольку большая часть информации, удаляемой при сжатии, является информацией, которая была интерполирована при распаковке.

Аналогичным образом сжимается информация о яркости. в квадратах размером 8x8 пикселей, поэтому, если ваши ширина и высота делятся на восемь, сетка выровняется после поворота изображения, и вы потеряете меньше актуальной информации.

Чтобы выполнить поворот без потерь, вы должны использовать совершенно другой метод,чтение файла JPEG и изменение порядка и поворота каждого квадрата информации так, чтобы оно формировало повернутое изображение без его распаковки и повторного сжатия.

2
ответ дан 7 December 2019 в 14:36
поделиться
Другие вопросы по тегам:

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