Рисование линии на imageView - PullRequest
0 голосов
/ 08 ноября 2011

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

Моя ситуация такова: я рисую изображение на imageView с использованием метода setImageBitmap.Теперь я собираюсь добавить строку или другой объект поверх него.Я нашел несколько статей, описывающих, что я могу переопределить метод onDraw, но когда я делаю это и рисую свое изображение, используя метод canvas.drawBitmap, на моем imageView появляются два изображения.Они рисуют друг над другом.

Как я могу нарисовать только одно изображение?

Какие-нибудь подсказки или, возможно, ссылка, описывающая это?

Вот код:

public void draw () {

    // Declaration output pixels vector
    int[] outputPixels = new int[mImage.getDataLength()];

    // Get the gray scale window width
    int windowWidth = mDICOMViewerData.getWindowWidth();

    // Compute the window offset x the number of gray levels (256)
    int windowOffset = ((2 * mDICOMViewerData.getWindowCenter() - windowWidth)) / 2;

    switch(mDICOMViewerData.getCLUTMode()) {

    case CLUTMode.NORMAL:
        computeGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
        break;

    case CLUTMode.INVERSE:
        computeInverseGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
        break;

    case CLUTMode.RAINBOW:
        computeRainbowRGBImage(windowWidth, windowOffset, outputPixels);
        break;

    };

    // Create the bitmap
    Bitmap imageBitmap = Bitmap.createBitmap(outputPixels, mImage.getWidth(),
            mImage.getHeight(), Bitmap.Config.ARGB_8888);

    // Check if image is to be rotated 90 degrees
    if (mIsRotate) {
        Matrix m = new Matrix();
        m.postRotate(90);
        imageBitmap = Bitmap.createBitmap(imageBitmap,
                0,  0, mImage.getWidth(), mImage.getHeight(), 
                m, true);
    }


    // Set the image
    setImageBitmap(imageBitmap);

}

Этот код был вызван из другого класса.

и здесь переопределение метода onDraw

public void onDraw (Canvas canvas) {short toolMode = mDICOMViewerData.getToolMode ();if (toolMode == ToolMode.MEASURE) {if (this.getImage ()! = null) {for (Point point: points) {canvas.drawCircle (point.x, point.y, 1, paint);}

            int[] outputPixels = new int[mImage.getDataLength()];

            // Get the gray scale window width
            int windowWidth = mDICOMViewerData.getWindowWidth();

            // Compute the window offset x the number of gray levels (256)
            int windowOffset = ((2 * mDICOMViewerData.getWindowCenter() - windowWidth)) / 2;

            switch(mDICOMViewerData.getCLUTMode()) {

            case CLUTMode.NORMAL:
                computeGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
                break;

            case CLUTMode.INVERSE:
                computeInverseGrayscaleRGBImage(windowWidth, windowOffset, outputPixels);
                break;

            case CLUTMode.RAINBOW:
                computeRainbowRGBImage(windowWidth, windowOffset, outputPixels);
                break;

            };

            // Create the bitmap
            Bitmap imageBitmap = Bitmap.createBitmap(outputPixels, mImage.getWidth(),mImage.getHeight(), Bitmap.Config.ARGB_8888);

            //drawing image here

            canvas.drawBitmap(imageBitmap, 153, 0, null);
            Paint paint = new Paint();
            paint.setColor(Color.RED);
            canvas.drawLine(0, 0, 400, 400, paint);

            super.onDraw(canvas);
        }
    }
}
...