Java: составной - PullRequest
       29

Java: составной

2 голосов
/ 09 сентября 2010

Я реализую диаграмму, которая показывает уровень контейнера. В зависимости от уровня заполнения цвет линии должен меняться (например, близко к максимуму, который должен отображаться красным). Вместо того, чтобы вычислять различные сегменты линии и устанавливать их цвета вручную, я бы хотел определить полосу, в которой цвет автоматически изменяется. Я думал сделать это с помощью пользовательского Composite / CompositeContext, но мне кажется, что я не могу определить расположение пикселей, возвращаемых растром. Моя идея состоит в том, чтобы проверить их y-значения и изменить цвет, если значение цвета определено в источнике, и если y-значение превышает пороговое значение.

Мой CompositeContext выглядит так:

CompositeContext context = new CompositeContext() {

    @Override
    public void compose(Raster src, Raster dstIn, WritableRaster dstOut) {
        int width = Math.min(src.getWidth(), dstIn.getWidth());
            int height = Math.min(src.getHeight(), dstIn.getHeight());

            int[] dstPixels = new int[width];

            for (int y = 0; y < height; y++) {
           dstIn.getDataElements(0, y, width, 1, dstPixels);
           for (int x = 0; x < width; x++) {
               if ( y ??? > 50) {
              dstPixels[x] = 1;
           } else {
                  // copy pixels from src
               }
        }
        dstOut.setDataElements(0, y, width, 1, dstPixels);
    }

}

"y", похоже, связано с чем-то, но оно не содержит абсолютного значения y (фактически метод compose вызывается несколько раз с растрами 32x32). Может быть, кто-то знает, как извлечь позицию в компоненте или даже лучший способ определить область, в которой данное значение пикселя заменяется другим значением.

1 Ответ

0 голосов
/ 09 сентября 2010

Разве вы не можете просто заполнить градиентом с 0 альфа, а затем нарисовать линию с полной альфа?

...