gpt4 book ai didi

Android:在大位图上绘制,2 层,最好的方法?

转载 作者:行者123 更新时间:2023-11-30 03:15:36 32 4
gpt4 key购买 nike

我正在开发一个应用程序,它在 ImageView 中显示大(大约 2000x2000 像素)位图。该图像必须那么大,因为用户可以通过捏合来缩放它以查看一些细节。应用程序必须能够在该图像上绘制圆圈,并且还可以单独显示图像,而没有圆圈。我使用了 2 层,但问题是内存,因为 2k x 2k px 大约是 16mb 的内存,并且创建另一个位图(另一个 16mb),只是为了画几个圆圈,在我看来是毫无意义的。有什么办法可以在图像上绘制简单的图元,并且还可以在没有图元的情况下显示它(在我的例子中是圆圈)?也许以某种方式只存储修改过的像素或某物?谢谢!

最佳答案

您不需要制作另一个 2000x2000 Bitmap 来绘制这些圆圈。只需“预渲染”一个圆圈,然后选择绘制它的位置。

我假设您在 Canvas 上绘制“大”图像,因为您具有缩放功能等。

如果不是,则需要覆盖 SurfaceView 的 onDraw(Canvas canvas) 方法,以便可以访问 SurfaceView Canvas。我不会深入探讨那部分,因为我再次假设您已经拥有它,但如果没有,该功能的实现将如下所示:

//Overriding SurfaceView onDraw(Canvas canvas)
@Override
protected void onDraw(Canvas surfaceCanvas) {
if(canvas == null) return; //No Canvas? No point in drawing then.
surfaceCanvas.drawColor(Color.BLACK);
//Draw your 'big' image on the SurfaceView Canvas
insertYourBigImageDrawingFunctionHere(surfaceCanvas);
//Now draw your circles at their correct positions...
insertCircleDrawingFunctionHere(surfaceCanvas);
}

现在您可以访问 SurfaceView Canvas,您可以精确地选择在其上绘制内容的方式。例如像圆圈...

我想提请您注意下面使用的多个 Canvas(surfaceCanvas 与 circleCanvas)。我曾经认为 Canvas 是一种“用于整个应用程序/Activity 的一个 Canvas”实现,但事实并非如此。您可以随意创建 Canvas'。它只是在位图上绘制的工具的一个实例。这对我来说是一个巨大的启示,让我对位图的组成方式有了更强大的控制。

public void myCircleDrawingFunction(Canvas surfaceCanvas){
//Make a new Bitmap for your circle
Bitmap.Config conf = Bitmap.Config.ARGB_4444;
tinyCircleBMP = Bitmap.createBitmap(10,10, conf);
//Make a new canvas using that Bitmap as the source...
Canvas circleCanvas = new Canvas(cacheBmp);
//Now, perform your drawing on the `Canvas`...
Paint p = new Paint();
circleCanvas.drawCircle(5, 5, 5, p);
//Now the `Bitmap` has a circle on it, draw the `Bitmap` on the `SufaceView Canvas`
surfaceCanvas.drawBitmap(tinyCircleBMP, 10, 10, p);
//Replace the '10's in the above function with relevant coordinates.
}

现在显然,您的圆圈将以不同方式缩放/平移到您的“大”图像,因为它们不再以与“大”图像相同的大小/位置绘制。您需要考虑如何根据“大”图像的当前比例和位置来平移每个圆圈的位置。

例如,如果您的图像放大到 200%,并且一个圆应该出现在大图像左侧 100px 处,那么您应该乘以像素值以考虑缩放,像这样

(伪代码):drawCircleAtX = Bitmap.left * BitmapZoomFactor

关于Android:在大位图上绘制,2 层,最好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164556/

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