|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Сглаживание/размытие краев битмапа.
Отрисовываю кусок изображения в битмапдату. Получается вот это вот http://test.typing.by/sample.png т.е. края изображения пиксельные. Подскажите, каким образом их можно размыть или отрисовать таким образом, чтобы оно со сглаженными краями получилось?
|
|
|||||
Lorem ipsum
|
а как отрисовываешь? картинку под маску и потом этот бутерброд в прозрачную битмапдату? или как-то хитрее/проще?
__________________
Поймай яблоко 2! |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
smothing не помог.
Цитата:
Как всё это безобразие теперь сгладить? Последний раз редактировалось udaaff; 09.04.2010 в 00:18. |
|
|||||
а, так получается картинка изначально с "лесенкой" (аллиасингом) ?
вообщем, небольшой тестовый код, на котором проблема или исходную картинку не помешало бы, чтобы вместе думать над проблемой. ---- если исходник картинки с "лесницой", тогда сглаживание программно сделать наверно нельзя. Как очень крайняя мера, можно блюр-фильтр повесить, аля _imgBD.applyFilter(_imgBD, _imgBD.rect, new Point(), new BlurFilter(3,2,1)); только вот, это как-то не красиво и собственно проблему решить это не поможет, так, самую малость замылит.) Последний раз редактировалось ps_spectre; 09.04.2010 в 00:28. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
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); 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); } Такой вариант придумал: 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. |
|
|||||
Lorem ipsum
|
только что просто положил в спрайт картинку с маской по форме паззла и отрисовал этот спрайт в новую битмапдату. красиво, края гладкие. и ощущение такое, что нормально это =)
__________________
Поймай яблоко 2! |
|
|||||
Нарисуй в одну битмапку маску чернобелую, и скопируй в альфаканал картинки.
__________________
if (love is true) break my.heart; |
|
|||||
udaaff, по-моему как-то все очень усложненно... или я чего-то не так понял, но судя по всему, надо попробовать без threshold обойтись, по-другому пазлы вырезать, ну типа, как выше заметили, по маске например.
|
|
|||||
Lorem ipsum
|
Rzer предложил элегантный и быстрый вариант. смотри BitmapData#copyChannel().
__________________
Поймай яблоко 2! |
Часовой пояс GMT +4, время: 16:39. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|