gpt4 book ai didi

java - 尝试用java android canvas.drawImage镜像图片

转载 作者:行者123 更新时间:2023-12-02 06:47:38 25 4
gpt4 key购买 nike

我在尝试使用 java android canvas.drawImage 旋转图片时遇到问题。我正在做一个小游戏,我正在使用我的drawImage 函数在屏幕上绘制不同的图片。但是现在我想旋转一些小图像,我为此创建了一个名为drawMirroredImage的函数。然而现在这些小图像不会出现在同一个地方。

这是我的代码:

public void drawImage(Image Image, int x, int y) {
canvas.drawBitmap(((AndroidImage) Image).bitmap, x, y, null);
}

public void drawMirroredImage(Image Image, int x, int y) {
canvas.save();
canvas.scale(-1.0f, 1.0f);
canvas.drawBitmap(((AndroidImage) Image).bitmap, x - canvas.getWidth(), y, null);
canvas.restore();
}

有人知道我做错了什么吗?

非常感谢您的帮助

最佳答案

以下内容对您有用。我在 SO 本身的某个地方找到了它,但不记得在哪里。

public static Bitmap getReflectionedBitmap(Context context,int resourceId,Bitmap originalImage,int reflectionGap) {

if(originalImage==null)
originalImage = BitmapFactory.decodeResource(context.getResources(),resourceId);

int width = originalImage.getWidth();
int height = originalImage.getHeight();

// This will not scale but will flip on the Y axis
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
// Create a Bitmap with the flip matix applied to it.
// We only want the bottom half of the image
Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
height / 2, width, height / 2, matrix, false);

// Create a new bitmap with same width but taller to fit reflection

Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888);
// Create a new Canvas with the bitmap that's big enough for
// the image plus gap plus reflection

Canvas canvas = new Canvas(bitmapWithReflection);
// Draw in the original image
canvas.drawBitmap(originalImage, 0, 0, null);
// Draw in the gap
Paint deafaultPaint = new Paint();
deafaultPaint.setColor(0xffffffff);
canvas.drawRect(0, height, width, height + reflectionGap , deafaultPaint);

canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
originalImage.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
// Set the paint to use this shader (linear gradient)
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);

return bitmapWithReflection;
}

我稍微调整了代码 fragment ,以便将其与资源图像一起使用。

如果要为资源中的图像创建反射,请传入 null 作为参数来代替 Bitmap

关于java - 尝试用java android canvas.drawImage镜像图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com