如何从中心点放大图像?

how can i zoom in image from its center point?

这是我的代码,我成功地从左上角放大了,但我想从图像的中心放大,并想增加 image.I 的大小 尝试了这段代码,直到 now.Help 我完成了请

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    //Log.e(Codistan_Tag, "Touch Event: " +MotionEvent.actionToString(event.getAction()));
    if(isImageReady) {

        if(isSelectionDragEnabled)
            mPanListener.onTouchEvent(event);

        if (isZoomEnabled) {
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                anchor_scale = mScaleFactor;
            }
            mScaleDetector.onTouchEvent(event);
            mPanListener.onTouchEvent(event);
        } else {
            switch (event.getAction()) {
                case MotionEvent.ACTION_POINTER_3_DOWN:
                    break;
                case MotionEvent.ACTION_POINTER_2_DOWN:
                    break;
                case MotionEvent.ACTION_POINTER_1_UP:

                    break;
                case MotionEvent.ACTION_DOWN:

                    if (isSelectionToolEnabled)
                        isDrawFinished = false;

                    orig_x = event.getX();
                    orig_y = event.getY();

                    //Log.e(Codistan_Tag, "-------ORIGIN-------s: " + String.valueOf(orig_x) + " " + String.valueOf(orig_y));

                    orig_x = (orig_x - dest.left);
                    orig_y = (orig_y - dest.top);

                    if(java.lang.Math.round(mScaleFactor) > 2) {
                        orig_x += (scale_cur_x * (riz_scale));
                        orig_y += (scale_cur_y * (riz_scale));
                    } else {
                        orig_x += (scale_cur_x);
                        orig_y += (scale_cur_y);
                    }

                    orig_x /= java.lang.Math.round(mScaleFactor);
                    orig_y /= java.lang.Math.round(mScaleFactor);

                    orig_x *= scale;
                    orig_y *= scale;

                    //mSelectionTaskManager.setOrigin((int) orig_x, (int) orig_y);
                    if(isSelectionToolEnabled)
                        MovementStack.add(new Pair((int)orig_x, (int)orig_y));

                    Log.e(Codistan_Tag, "Codistan Origins: " + String.valueOf(orig_x) + ", " + String.valueOf(orig_y));

                    break;
                case MotionEvent.ACTION_MOVE:
                    max_dist = dist * scale;
                    if (event.getAction() != 1) {
                        move_x = event.getX();
                        move_y = event.getY();

                        //Log.e(Codistan_Tag, "Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y));

                        move_x = (move_x - dest.left);
                        move_y = (move_y - dest.top);



                        if(java.lang.Math.round(mScaleFactor) > 2) {
                            move_x += (scale_cur_x * riz_scale);
                            move_y += (scale_cur_y * riz_scale);
                        } else {
                            move_x += (scale_cur_x);
                            move_y += (scale_cur_y);
                        }

                        move_x /= java.lang.Math.round(mScaleFactor);
                        move_y /= java.lang.Math.round(mScaleFactor);

                        move_x *= scale;
                        move_y *= scale;

                        //Log.e(Codistan_Tag, "Codistan Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y));

                        if (move_x >= 0 && move_y >= 0) {
                            if (!isSelectionToolEnabled && isDistortionEnabled) {
                                warpPhotoFromC(image, height, width, max_dist/mScaleFactor, orig_x, orig_y, move_x, move_y);
                                first++;
                                distortedBmp.setPixels(image, 0, width, 0, 0, width, height);
                                fg = false;
                            } else {
                                //Cut Tool Enabled
                                distortedBmp.setPixels(image, 0, width, 0, 0, width, height);
                                MovementStack.add(new Pair((int) move_x, (int) move_y));
                            }
                        }
                    }
                    orig_x = move_x;
                    orig_y = move_y;
                    break;
                case MotionEvent.ACTION_UP:
                    if (isSelectionToolEnabled)
                        isDrawFinished = true;
                    break;
            }
        }
        v.invalidate();
    }
    return true;
}

如果您能以某种方式对正在放大的图像的 "fromXDelta" 和 "fromYDelta" 值进行编码,请尝试一下。每个值大约为 50%。

我得到了我的解决方案,将其除以 2

orig_x = event.getX()/2;
orig_y = event.getY()/2;