Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как улучшить качество после ресайза? (http://www.flasher.ru/forum/showthread.php?t=153257)

motoroller 30.03.2011 22:42

Как улучшить качество после ресайза?
 
Собственно есть работающий модуль, но вот результаты не очень удовлетворяют, есть функция, которая ресайзит до нужных размеров
Код AS3:

// ресайз картинок
                private function resizeImg(btm:Bitmap, width:Number, height:Number):Bitmap {
                        var matrix:Matrix = new Matrix();
                        var myBitmap:Bitmap;
                        var size:Number = 1;
 
                        if (btm.width > width || btm.height > height) {
                                size = Math.min(width / btm.width, height / btm.height);
                                matrix.scale(size, size);
                                var myBitmapData = new BitmapData(btm.width * size, btm.height * size, true);
                                myBitmapData.draw(btm, matrix, null, null,null, true);
                                myBitmap = new Bitmap(myBitmapData, PixelSnapping.NEVER, true);
                        } else
                                myBitmap=btm;
                        return myBitmap;
                }

После этого я все докодирую через alchemy
Код AS3:

jpegQuality= 100;
 
jpeglib.encodeAsync(encodeComplete, imgData, imgEncoded, imgBitmap.width, imgBitmap.height, jpegQuality);

Качестов не совсем ужасное но хотелось бы лучше, особенно когда картинка большая 800 на 600 видны все косяки :(

Причем заметил такую ситуацию:
Допустим у меня в настройках стоит ресайзить до 800 на 600
Так вот если я гружу файл 1200 на 700 большие искажения
а чем размеры приближены к 800 на 600, тем искажений меньше ...
Все-таки в чем косяк?

GBee 30.03.2011 23:33

А пример картинки и результата не покажете? И обычный JPEGEncoder тоже плохо делает?

DZHETIGAPA 31.03.2011 00:37

А smoothing не помогает?

motoroller 31.03.2011 02:04

Так примеры сейчас:
ну а входящая картинка отичная макетная
http://kapusta-lab.ru/main.jpg

а вот ресайз до 640 на 480
http://kapusta-lab.ru/data/portfolio/82.jpg

Добавлено через 2 минуты
Делал кстати раньше обычным jpeg encoder
Вроде бы результат такой же ... а вы думаете это проблема в декодере или в моей функции ресайза?

Добавлено через 5 минут
Подскажите а как использовать smoothing?
На всамом деле во вконтакте фотки ничего выглядят,
хотя если я загружаю большие 3000 на 4000 они тоже ничего
ну вот все почему-то от размера входящего файла зависит я имею ввиду качество, ресайза

Добавлено через 7 минут
Вы предлагает поставить PixelSnapping.ALWAYS ?

Добавлено через 9 минут
Последнее попробовал не помогло :(

Добавлено через 11 минут
Кстати new Bitmap(myBitmapData, PixelSnapping.AUTO, true);
Последний параметр это и есть smoothing
так что он у меня изначально был включен

alatar 05.04.2011 16:19

1. Соотношение сторон у 1200х700 и у 800х600 разное. Вы сами искажаете картинку, декодер тут не причем. Уменьшайте картинку пропорционально.
2. При достаточно больших значениях уменьшения, лучше уменьшать постепенно. Четвертями или половинами, в зависимости от величины уменьшения.

motoroller 06.04.2011 17:20

Так вот функиця :
Код AS3:

// ресайз картинок
                private function resizeImg(btm:Bitmap, width:Number, height:Number):Bitmap {
                        var matrix:Matrix = new Matrix();
                        var myBitmap:Bitmap;
                        var size:Number = 1;
 
                        if (btm.width > width || btm.height > height) {
                                size = Math.min(width / btm.width, height / btm.height);
                                matrix.scale(size, size);
                                var myBitmapData = new BitmapData(btm.width * size, btm.height * size, true);
                                myBitmapData.draw(btm, matrix, null, null,null, true);
                                myBitmap = new Bitmap(myBitmapData, PixelSnapping.NEVER, true);
                        } else
                                myBitmap=btm;
                        return myBitmap;
                }

Она как раз пропорционально умеьшает ...


Часовой пояс GMT +4, время: 12:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.