Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.04.2010, 23:58
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 1  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
По умолчанию Сглаживание/размытие краев битмапа.

Отрисовываю кусок изображения в битмапдату. Получается вот это вот http://test.typing.by/sample.png т.е. края изображения пиксельные. Подскажите, каким образом их можно размыть или отрисовать таким образом, чтобы оно со сглаженными краями получилось?

Старый 09.04.2010, 00:03
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
а как отрисовываешь? картинку под маску и потом этот бутерброд в прозрачную битмапдату? или как-то хитрее/проще?
__________________
Поймай яблоко 2!

Старый 09.04.2010, 00:04
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 3  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
smothing = true битмапе (в конструкторе последний параметр)
и если отрисовка через draw то последний параметр smothing тоже true поставить.

Старый 09.04.2010, 00:11
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
smothing не помог.

Цитата:
Отрисовываю кусок изображения в битмапдату.
Не так описал, извиняюсь. Копируется изображение прямоугольной формы изначально, а затем с помощью метода threshold вырезаются эти загогулины (типа пазл).
Как всё это безобразие теперь сгладить?


Последний раз редактировалось udaaff; 09.04.2010 в 00:18.
Старый 09.04.2010, 00:17
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 5  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
а, так получается картинка изначально с "лесенкой" (аллиасингом) ?
вообщем, небольшой тестовый код, на котором проблема или исходную картинку не помешало бы, чтобы вместе думать над проблемой.
----
если исходник картинки с "лесницой", тогда сглаживание программно сделать наверно нельзя. Как очень крайняя мера, можно блюр-фильтр повесить, аля
_imgBD.applyFilter(_imgBD, _imgBD.rect, new Point(), new BlurFilter(3,2,1));
только вот, это как-то не красиво и собственно проблему решить это не поможет, так, самую малость замылит.)


Последний раз редактировалось ps_spectre; 09.04.2010 в 00:28.
Старый 09.04.2010, 00:29
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
var map:BitmapData = new BitmapData(800, 800);
map.draw(new PuzzleMap()); // PuzzleMap — мувиклип, с заливками нескольких цветов. Аля карта с пазлами.
 
// инстанциируем исходное изображение. Какое-то изображение, кусок из которого будет вырезаться
image = new Art2(800, 800);
 
// цвет одной из заливок в PuzzleMap            
var currentPuzzleColor:Number = 0xFF000000;
 
// границы этого цвета           
var puzzleBounds:Rectangle = map.getColorBoundsRect(0xFFFFFFFF, currentPuzzleColor, true);
 
// создаем битмапдату по размерам цвета
var croppedImage:BitmapData = new BitmapData(puzzleBounds.width, puzzleBounds.height, true, 0xFFFFFFFF);
 
// копируем кусок исходного изображения в границах цвета
croppedImage.copyPixels(image, puzzleBounds, new Point(0, 0), image, new Point(0, 0), true);
 
// стираем все пиксели соответствующие пикселям map, которые не равны текущему цвету currentPuzzleColor
croppedImage.threshold(map, puzzleBounds, 
new Point(0, 0), "!=", currentPuzzleColor, 0x00000000, 0xFFFFFFFF);
 
var puzzle:Puzzle = new Puzzle(croppedImage);
puzzle.x = 100;
puzzle.y = 100;
root.addChild(puzzle);
Код в классе Puzzle
Код AS3:
public function Puzzle(bitmapData:BitmapData)
{
    //TODO: implement function
    super();
 
    this.bitmapData = bitmapData;
    init();
}
 
private var bitmap:Bitmap;
private var bitmapData:BitmapData;
 
private function init():void
{
    //cacheAsBitmap = true
    var bmd:BitmapData = bitmapData.clone();
    //bmd.applyFilter(bmd, bitmapData.rect, new Point(0, 0), new BlurFilter(4, 4, 1));
    //bmd.draw(bitmapData);
   // bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), new BevelFilter());
    bitmap = new Bitmap(bmd, PixelSnapping.AUTO, true); // что с тру, что без тру один черт
 
    bitmap.filters = [ new BevelFilter(4, 45, 0xFFFFFF, 1, 0x000000, 1, 4, 4, 1, 1, "inner", false ) ];
 
    //bitmap.smoothing = true
    addChild(bitmap);
}
upd:
Такой вариант придумал:
Код AS3:
 
        private function init():void
        {
            var bmd:BitmapData = bitmapData.clone();
            var bounds:BitmapData = bitmapData.clone();
            bounds.applyFilter(bounds, bitmapData.rect, new Point(0, 0), new BlurFilter());
            bounds.applyFilter(bounds, bitmapData.rect, new Point(0, 0), 
                new BevelFilter(4, 45, 0xFFFFFF, 1, 0x000000, 1, 4, 4, 1, 1, "inner", true ));
            bmd.draw(bounds);
 
            bitmap = new Bitmap(bmd);
            addChild(bitmap);
        }
Но не покидает чувство, что через одно место это всё.


Последний раз редактировалось udaaff; 09.04.2010 в 00:58.
Старый 09.04.2010, 01:08
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
только что просто положил в спрайт картинку с маской по форме паззла и отрисовал этот спрайт в новую битмапдату. красиво, края гладкие. и ощущение такое, что нормально это =)
__________________
Поймай яблоко 2!

Старый 09.04.2010, 01:10
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 8  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Нарисуй в одну битмапку маску чернобелую, и скопируй в альфаканал картинки.

Старый 09.04.2010, 01:13
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 9  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
udaaff, по-моему как-то все очень усложненно... или я чего-то не так понял, но судя по всему, надо попробовать без threshold обойтись, по-другому пазлы вырезать, ну типа, как выше заметили, по маске например.

Старый 09.04.2010, 01:15
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Rzer предложил элегантный и быстрый вариант. смотри BitmapData#copyChannel().
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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