Android - установить точку на случайную позицию в импортированном изображении - PullRequest
0 голосов
/ 28 ноября 2018

спасибо заранее !!!

Ситуация: я и друг должны разработать приложение для университета.(Я думаю, что эта история распространена ?!) У нас была идея создать приложение, в котором вы делаете или импортируете изображение, а приложение создает одну случайную точку / точку на этом изображении.Поэтому, если вы стоите перед полкой в ​​магазине и не знаете, какое пиво / ликер / чипсы / ... вам следует купить, сделайте снимок и выберите случайную точку.

Проблема:У нас был просмотр изображений, куда импортировать картинку.Зайдите в галерею или сделайте фото работающим.Но я не знаю, как установить точку в этом изображении / изображении.На данный момент я наложил на него второе изображение, где появляется случайный текст, включающий «•».Это больше похоже на обходной путь.

Код точки в классе MyCanvas:

int min = 5;
int max = 500;

Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
int i2 = r.nextInt(max - min + 1) + min;

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint pBackground = new Paint();
        pBackground.setColor(Color.TRANSPARENT);
        canvas.drawRect(0, 0, 512, 512, pBackground);
        Paint pText = new Paint();
        pText.setColor(Color.RED);
        pText.setTextSize(40);
        canvas.drawText("•", i1 , i2, pText);
    }

Метод onClick:

public void click_button_magic(View view) {
    View v = new MyCanvas(getApplicationContext());
    Bitmap bitmap =Bitmap.createBitmap(500/*width*/, 500/*height*/, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    v.draw(canvas);
    ImageView iv2 = (ImageView) findViewById(R.id.imageView_point);
    iv2.setImageBitmap(bitmap);
}

Если я изменю этот код наПри просмотре изображения, куда попадают импортированные изображения, изображение становится белым после нажатия на кнопку «Магия».

Что я хочу изменить:

  • установить точку (не текст)
  • установить точку в импортированном изображении
  • получить из изображения максимальное и минимальное измерение внутри, чтобы установить точку (ширина, высота)

Я думаю, что для этих задач я сделалчто-то принципиально не так.Но я не знаю, что ... = (

Так что я надеюсь, что вы можете помочь мне (код или советы, чтобы встать на правильный путь)

Большое спасибо, и я надеюсь, что мой английскийдостаточно хорошо, чтобы понять мою проблему!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Тем временем я получаю решение для получения точки на картинке.

Чтобы установить изображение как viewview:

...
imageview.setImageBitmap(image);
        bm = image;
        iv = imageview;
...

bm теперь является растровым изображением с требуемым изображением, iv - этоimageview

Теперь Clickfunction:

public void click_button_magic(View view) {

    //bei jedem Klick wird das Bild neu geladen, damit bei erneutem Klicken ein neuer Punkt erscheint
    iv.setImageBitmap(bm);

    ImageView img = findViewById(R.id.imageView_photoImport);
    img.setDrawingCacheEnabled(true);
    Bitmap scaledBitmap = img.getDrawingCache();

    //get Maße des IMG
    int targetWidth = scaledBitmap.getWidth();
    int targetHeight = scaledBitmap.getHeight();

    Bitmap targetBitmap =  loadBitmapFromView(iv, iv.getWidth(), iv.getHeight());//Bitmap.createBitmap(targetWidth,targetHeight,Bitmap.Config.ARGB_8888);

    //get random coordinates
    int min = 5;
    int maxWidth = targetWidth;
    int maxHeight = targetHeight;

    Random r = new Random();
    int randomWidth = r.nextInt(maxWidth - min + 1) + min;
    int randomHeight = r.nextInt(maxHeight - min + 1) + min;

    //Paint object
    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.RED);

    Canvas canvas = new Canvas(targetBitmap);
    canvas.drawCircle(randomWidth, randomHeight,20, paint);
    img.setImageBitmap(targetBitmap);
}

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, width, height);
//Get the view’s background
    Drawable bgDrawable =v.getBackground();
    if (bgDrawable!=null)
//has background drawable, then draw it on the canvas
        bgDrawable.draw(c);
    else
//does not have background drawable, then draw white background on the canvas
        c.drawColor(Color.WHITE);
    v.draw(c);
    return b;
}

Я надеюсь, что это поможет кому-то в будущем ... возможно, нет, может быть,

0 голосов
/ 28 ноября 2018

Мне трудно понять, как ты это сделал, потому что я не вижу весь твой код.Но если бы я сделал этот проект, я бы использовал FrameLayout, и добавил бы Photo с помощью:

  android:layout_width="match_parent" 
  android:layout_height="match_parent"

, а затем сделал бы маленькое представление с круглым фоном и сделал бы левое поле справа справа случайным.Таким образом, вам не нужно рисовать на холсте и все эти хлопоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...