как создать ограничивающий прямоугольник круга Android

1

У меня есть растровое изображение, которое устанавливает две переменные centreX, centreY через метод onTouchEvent(). Из этих координатах x, y я рисую круг по растровому изображению и могу менять окружные пиксели на разные значения rgb через слайдBar. Я нацелен на внутренние пиксели круга с помощью алгоритма, но, к сожалению, поскольку он стоит, я должен искать весь пиксель растрового изображения по пикселям, чтобы нацелить пиксели окружности. у этого есть массивный вызов вызова метода, который я хотел бы уменьшить.

То, что я собираюсь сделать, - создать ограничивающий прямоугольник вокруг круга, чтобы у моего алгоритма было меньше места для поиска, так что мы с надеждой будем ускорять работу. Как я могу создать прямоугольник вокруг круга, используя координаты окружности x, y и радиус 50?

Спасибо матовой.

public void findCirclePixels(){ 


        for (int i=0; i < bgr.getWidth(); ++i) {
            for (int y=0; y < bgr.getHeight(); ++y) {

    if( Math.sqrt( Math.pow(i - centreX, 2) + ( Math.pow(y - centreY, 2) ) ) <= radius ){

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }   

        }// end of changePixel()
  • 0
    Полагаю, было бы намного дешевле нарисовать новый круг. Вы должны рассмотреть введение фрейма или просто очистить и воссоздать содержимое экрана
  • 0
    @kostja kostja Привет, я не уверен, что вы понимаете мои требования, извините, если вы делаете :). я только устанавливаю пиксели круга на другой цвет, чтобы убедиться, что ползунок и алгоритм пикселей изменяют правильные пиксели. приложение в конечном итоге применяет эффект «рыбий глаз» к кругу (в основном искажает пиксели круга). Единственный способ найти пиксели круга в растровом изображении - выполнить поиск по всему растровому изображению слева направо, сверху вниз, попиксельно. Я хотел бы только искать прямоугольник вокруг круга и поэтому меньше звонков.
Показать ещё 1 комментарий
Теги:
bounding-box
bitmap
circle

2 ответа

0
Лучший ответ

Измените пределы внешнего контура от circle.x - радиус до радиуса circle.x +, а ваш внутренний контур ограничивается от круга .y - радиус до круга .y + радиус. Вы можете, в зависимости от того, какие ваши x и y могут быть, должны проверить, не превышает ли какое-либо из этих значений меньше 0 или превышает пределы ширины или высоты ваших изображений.

  • 0
    Привет, разве мой внешний цикл не ограничен? bgr.getWidth ()?
  • 0
    Глина, я не уверен, что вы имели в виду следующий ответ, но это то, что я сделал, и теперь это намного быстрее, спасибо.
Показать ещё 2 комментария
0

Это отлично работает.

 public void findCirclePixels(){    



        for (int i=centreX-50; i < centreX+50; ++i) {
            for (int y=centreY-50; y <centreY+50 ; ++y) {

    if( Math.sqrt( Math.pow(i - centreX, 2) + ( Math.pow(y - centreY, 2) ) ) <= radius ){

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }

        }// end of changePixel()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню