PDA

Просмотр полной версии : Ресайзинг картинок


vvk80
03.10.2007, 18:35
Здравствуйте!

Требуется ваша помощь.
Есть следующая задача: создать клип, в который бы загружались картинки, а потом по клику на маленькую картинку (thumbnail) появлялась бы точно такая же, но большая картинка...

Понятно, что самый простой вариант сделать две картинки:маленькую и большую. Но я думаю, этот вариант не правильный и не эфективный. Вариант с изменением width, height тоже не катит, так как сильно портится кач-во получающейся картинки.

Подозреваю, что BitmapData может все, но как конкретно, не знаю... :rolleyes:

Помогите, пожалуйста!

P.S.
Может есть уже готовый класс, делающий всю рутину? :)

Заранее спасибо!

Ieshua
04.10.2007, 15:19
Нужно делать 2 картинки.

vvk80
04.10.2007, 16:52
Нужно делать 2 картинки.

печально...
пока так и делаю... но всегда хочется максимум автоматизации :umnik2:

krolser
04.10.2007, 18:15
Для этого можно посмотреть в сторону других языков и написать на одном из них автоматизационную тулзу.

Мне один раз понадобилось разрезать несколко картинок на квалратики. Т.к. я знаю Java мне особого труда не составило это сделать.

Если кого заинтересовала подобная вещь, то могу поделиться.

baron27
04.10.2007, 18:27
у битмапа есть smoothing в конструкторе.

vvk80
05.10.2007, 00:47
Для этого можно посмотреть в сторону других языков и написать на одном из них автоматизационную тулзу.

Мне один раз понадобилось разрезать несколко картинок на квалратики. Т.к. я знаю Java мне особого труда не составило это сделать.

Если кого заинтересовала подобная вещь, то могу поделиться.
спасибо, но, насколько мне известно,тогда придется ставить Java Runtime, это уже не вариант, так как потенциальному пользователю придется долго объяснять, что и зачем ему надо поставить для того чтобы запустить flash файл!
с таким успехом можно на C# что-нибудь в этом стиле написать и пихнуть в дистрибутив .Net Framework :quiet:

smooth - это уже интереснее :)

krolser
05.10.2007, 12:32
спасибо, но, насколько мне известно,тогда придется ставить Java Runtime, это уже не вариант, так как потенциальному пользователю придется долго объяснять, что и зачем ему надо поставить для того чтобы запустить flash файл!
с таким успехом можно на C# что-нибудь в этом стиле написать и пихнуть в дистрибутив .Net Framework :quiet:

smooth - это уже интереснее :)
Всё верно, просто я предполагал, что у вас картинки лежат на сервере, а не на клиенте.

vvk80
05.10.2007, 14:41
Всё верно, просто я предполагал, что у вас картинки лежат на сервере, а не на клиенте.

да, у меня сервера вообще нет... по плану все должно работать на любом компьютере, даже на котором нет инета (поэтому основной файл -это Windows Projector)...

vvk80
08.10.2007, 09:55
по теме ресайзинга:

myBitmapData = new BitmapData(container.width, container.height);
var myMatrix:Matrix = new Matrix();
myMatrix.a = .5;
myMatrix.d = .4;

myBitmapData.draw(container, myMatrix, null, null,null, true);
myBitmap = new Bitmap(myBitmapData);

bitmapContainer.addChild(myBitmap);

this.addChild(bitmapContainer);

загрузил два одинаковых изображения, одно через Loader с scaleX и scaleY, другое - это битмап, в который методом draw откопировано первой изображение, наложена трансформация, и включен smoothing...
Разницы между smoothing=true || smoothing=false не вижу...

Может, чего не так делаю?:umnik2:

Заранее спасибо за любую помощь!

etc
08.10.2007, 10:30
Так надо использовать smooth не при отрисовке, а постоянный у Bitmap.

vvk80
08.10.2007, 10:51
Так надо использовать smooth не при отрисовке, а постоянный у Bitmap.

исправил код, спасибо...

удалось добиться чего-то приемлемего следующим кодом:
//container.scaleX = .5;
//container.scaleY = .5;
//container.width = 192;
//container.height = 333;
myBitmapData = new BitmapData(container.width, container.height);
trace(container.width +" "+ container.height);
var myMatrix:Matrix = new Matrix();
//myMatrix.a = .5;
//myMatrix.d = .5;

myBitmapData.draw(container, myMatrix, null, null,null, true);
myBitmap = new Bitmap(myBitmapData, "auto", true);
myBitmap.scaleX = .5;
myBitmap.scaleY = .5;

bitmapContainer.addChild(myBitmap);

this.addChild(bitmapContainer);
по крайней мере стала вида разница;

vvk80
08.10.2007, 10:59
все равно результат не очень...
слева - отресайзенный Flash Player вариант, справа - "ручной" фотошоповский, антиалиасинга не хватает

etc
08.10.2007, 13:11
А зачем делать draw, уменьшая картинку в два раза, потом ещё раз уменьшать в два раза? Зачем менять размеры Bitmap, когда можно отрисовать картинку в 4 раза меньше?

vvk80
08.10.2007, 14:01
А зачем делать draw, уменьшая картинку в два раза, потом ещё раз уменьшать в два раза? Зачем менять размеры Bitmap, когда можно отрисовать картинку в 4 раза меньше?
я отключил ресайзинг для draw в последнем примере.
теперь в метод draw я подаю оригинальную картинку

etc
08.10.2007, 14:03
Лучше бы наоборот. В конкретно данном случае лучше сделать наоборот.
Но вообще говоря smooth != image resize в Photoshop.