Форум 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=153736)

goodguy 08.04.2011 08:19

Как можно скопировать пиксели из не прямоугольной области?
 
Собственно, сабж.
Нужно сделать что-то типа, lasso / polygonal lasso в фотошопе.
Допустим, загружаю изображение, обвожу мышкой какой-нибудь кусок, и хочу, чтобы в новую битмапку скопировалась только выделенная область, а все остальное стало альфа каналом.

Кто-нибудь знает как реализовать? =)

Hauts 08.04.2011 08:26

Наверное копировать придется всю область (прямоугольником) по габаритам выделенной области. А потом шаманить с совмещением двух битмап — прямоугольной и той, в которую отрисована форма выделения.

MAPUTO 08.04.2011 08:31

РисуеТСЯ фигура мышкой, добавляется в пустой объект BitmapData с прозрачными пикселами - такого же размера как и исходный. Ну а потом copyChannel().

Точнее можно сделать прямоугольник под размер картинки, скажем, зеленого цвета. Плюсануть к нему объект произвольной формы (красного цвета) и конвертировать их в растр. Ну а потом copyChannel() - Красный на Альфа.

goodguy 08.04.2011 08:54

MAPUTO, а есть пример? Что-то не могу сообразить

MAPUTO 08.04.2011 09:59

Типа того. Возможны ошибки - код не компилировал.

Код AS3:

myBMP; //объект BitmapData
var someShape:Shape;
//Draw shape
 
var n_x =  someShape.x - myBMP.x - someShape.width/2//координаты верхнего левого угла someShape
var n_y =  someShape.y - myBMP.y - someShape.height/2; // относительно myBMP
 
var maskBMP:BitmapData = new BitmapData(someShape.width, someShape.height, false, 0xFF00FF00); // Цвет выбирается произвольно. Можно использовать и альфа-канал
 
maskBMP.draw(someShape); //объект someShape должен быть, к примеру, красного цвета 0xFFFF0000
 
 
var newBMP:BitmapData = new BitmapData(someShape.width, someShape.height, false, 0xFFFFFFFF); // Объект-приемник
 
//копируем пиксели из области над которой лежит someShape
var rect:Rectangle = new Rectangle(0, 0, someShape.width, someShape.height);
var pt:Point = new Point(n_x, n_y);
newBMP.copyPixels(myBMP, rect, pt);
 
newBMP.copyChanel(maskBMP, rect,[0,0],BitmapDataChannel.RED,BitmapDataChannel.ALPHA);
 
// промежуточные объекты можно удалить


goodguy 08.04.2011 10:20

Смысл понятен, спасибо =)

PsixokoT 12.08.2011 17:17

у copyPixels есть параметр alphaBitmapData

Wolsh 12.08.2011 18:20

Ребят, извините, но во-первых, вы копируете цвета всех пикселей в прямоугольнике, в том числе невидимых. И это бы ладно, но вы еще для всех видимых устанавливаете альфу 100%. А если они были полупрозрачные?

goodguy 12.08.2011 20:06

Тема баян. Ну раз уж на то пошло, перечитайте вопрос. Смысл был в реализации инструмента наподобие лассо в фотошопе. Не понимаю, каким боком сюда вообще можно отнести alphaBitmapData.
PsixokoT явно в вопрос не вник

Wolsh 12.08.2011 20:41

Я бы предложил поиграться (самому сейчас некогда, увы) с Graphics и bitmapFill – Лассо рисует фигуру, заливаемую битмапдатой исходного изображения.


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

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