2012-07-04 1 views
0

Я хотел бы переписать/очистить часть изображения, используя прозрачный цвет в PlayN. Возможно ли это как-то? (PlayN 1.3.1)PlayN: очистить часть изображения

Вот пример кода, я сделал:

@Override 
    public void init() { 
    // create and add background image layer 
    Image bgImage = assetManager().getImage("images/bg.png"); 
    ImageLayer bgLayer = graphics().createImageLayer(bgImage); 
    graphics().rootLayer().add(bgLayer); 
    SurfaceLayer surfaceLayer = graphics().createSurfaceLayer(640, 480); 
    CanvasImage image = graphics().createImage(640, 480); 
    surfaceLayer.surface().setFillColor(0xff000000); 
    surfaceLayer.surface().fillRect(100, 100, 200, 200); 
    surfaceLayer.surface().setFillColor(0x00000000); 
    surfaceLayer.surface().fillRect(150, 150, 50, 50); 
    graphics().rootLayer().add(surfaceLayer); 
    image.canvas().setFillColor(0xff000000); 
    image.canvas().fillCircle(300, 300, 100); 
    image.canvas().setFillColor(0x00000000); 
    image.canvas().fillCircle(300, 300, 50); 
    graphics().rootLayer().add(graphics().createImageLayer(image)); 
    } 

Так что я попытался с SurfaceLayer, а также с не помогали ImageLayer ни один из них (я предполагаю, что это так, как это не возможно для перезаписи деталей). Я хотел иметь два пересекающихся прямоугольника и круги, но я вижу только один из них.

ответ

2

Нанесение или заполнение прозрачным цветом приводит к тому, что ничего не рисуется. Единственная операция, которую вы имеете в PlayN для очистки данных пикселей, - Canvas.clear(), которая очищает все изображение. Вы могли также использовать доступ к GWT пиксельных операций холст и установить эти пиксели вручную >>https://stackoverflow.com/a/10492578/1117740

Для простого решения ...

... чтобы очистить прямоугольник можно просто сделать копию вашего изображения, затем очистите изображение и отмените разделы, которые вы хотите сохранить.

Очевидно, что вы не могли бы так легко сделать это с кругом, хотя вы можете использовать алгоритм рисования круга Bresenham и копировать сегменты каждой линии сканирования, которую вы хотите сохранить.

+0

Спасибо, это путь, но я боюсь, что это не поможет с проблемами GC на Android. (Чтобы сделать вещи прозрачными снова, не потребовалось бы воссоздать весь слой/изображение и уничтожить их.) –