2

コンテナのレベルを示す図を実装しています。塗りつぶしレベルに応じて、線の色が変化する必要があります(たとえば、最大値に近い場合は赤で表示されます)。線のさまざまなセグメントを計算してそれらの色を手動で設定するのではなく、色が自動的に変化するバンドを定義したいと思います。カスタムの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ラスターで数回呼び出されます)。誰かがコンポーネント上の位置を取得する方法や、特定のピクセル値が別の値に置き換えられる領域を定義するためのより良い方法を知っているかもしれません。

4

1 に答える 1

0

アルファ 0 のグラデーションで塗りつぶしてから、完全なアルファで線を引くことはできませんか?

于 2010-09-09T06:45:28.617 に答える