Я реализую диаграмму, которая показывает уровень контейнера. В зависимости от уровня заполнения цвет линии должен меняться (например, близко к максимуму, который должен отображаться красным). Вместо того, чтобы вычислять различные сегменты линии и устанавливать их цвета вручную, я бы хотел определить полосу, в которой цвет автоматически изменяется. Я думал сделать это с помощью пользовательского 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). Может быть, кто-то знает, как извлечь позицию в компоненте или даже лучший способ определить область, в которой данное значение пикселя заменяется другим значением.