2013-08-13 2 views
0

У меня есть два объекта BitmapData с включенной прозрачностью. Один - большой красный квадрат, другой - маленький синий круг.реализация маски с использованием BitmapData

Если, например, я размещаю синий круг над красным квадратом. Я хотел бы создать область прозрачности в BitmapData красного квадрата, где кружок размытия. Подобно тому, как работает маска.

Я попытался использовать операции getPixel32(), но это очень медленно (см. Ниже). Есть ли другой способ, которым я могу это сделать? Спасибо

for(var x:int = 0; x < circleBitmapData.width; x++){ 
    for(var y:int = 0; y < circleBitmapData.width; y++){ 
     if(circleBitmapData.getPixel32(x,y) != 0x00000000){ 
      squareBitmapData.setPixel(x,y,0x00000000); 
     } 
    } 
} 

EDIT - У меня есть одно возможное решение, но оно не идеально. Я могу объединить два растровых изображения, а затем использовать метод threshold, чтобы превратить пиксели выше определенного значения в прозрачные. Поэтому я мог бы установить все голубые пиксели в прозрачные. Тем не менее, я получаю тонкое кольцо синего вокруг прозрачной области

+0

Почему вы не можете использовать маску? – putvande

+0

Потому что я делаю blitting – user1063998

ответ

0

Проверьте пороговый метод bitmapData. Он должен вернуть вам bitmapData с пересеченной областью. При этом вам больше не нужно получать и устанавливать пиксель. Кроме того, getPixel32 должен иметь setPixel32: P

+0

Я не могу найти метод разницы. Самый близкий, который я вижу, это метод сравнения? но это не сработает – user1063998

+0

user1063998 загрузите свой проект где-нибудь, и я позабочусь о вас. оставьте здесь комментарий с моим именем, чтобы я получил уведомление, когда вы это сделаете. – Discipol

Смежные вопросы