gpt4 book ai didi

Java 变量范围 - 复制位图?

转载 作者:行者123 更新时间:2023-11-30 11:02:40 27 4
gpt4 key购买 nike

我试图更好地理解 Java 变量范围是如何工作的,以及当我们在方法中执行类似以下操作时底层数据到底发生了什么:

this.variable = variable

这条线到底是做什么的?这是我的实际问题:

我正在加载位图以在我的 (Android) OpenGL ES 2.0 项目中用作纹理。它是这样的:

public loadBitmapsForTextures(){

myBitmap = BitmapFactory.decodeResource(view.getResources(), R.drawable.testbmp, Options);

myObject.setTexture(view, myBitmap);

Log.v("NewTag","Recycled: Again: "+myBitmap);

myBitmap.recycle(); //All done - no longer required. But why is myBitmap still valid here?
}

在我的 Sprite 类(其中 myObject 是一个对象)中,我有以下内容:

public void setTexture(GLSurfaceView view, Bitmap imgTexture){

this.imgTexture=imgTexture; //What exactly is this line doing? Copying the actual data? Just making another 'pointer' to the original data?

iProgId = Utils.LoadProgram(strVShader, strFShader);
iBaseMap = GLES20.glGetUniformLocation(iProgId, "u_baseMap");
iPosition = GLES20.glGetAttribLocation(iProgId, "a_position");
iTexCoords = GLES20.glGetAttribLocation(iProgId, "a_texCoords");
//Return usable texture ID from Utils class
texID = Utils.LoadTexture(view, imgTexture);

Log.v("NewTag","Recycled: Before: "+imgTexture);
imgTexture.recycle();
imgTexture=null;
Log.v("NewTag","Recycled: After"+imgTexture);

}

setTexture 方法中的日志给出了我期望的结果。第一个命名位图:

Recycled: Before: android.graphics.Bitmap@1111111

Recycled: After: null

但是,初始 loadBitmapsForTextures() 方法中的日志语句给出了一些我没有预料到的内容:

Recycled: Again: android.graphics.Bitmap@1111111

为什么我可以(貌似)再次回收此位图?我只能假设我对以下行的理解有缺陷:

this.imgTexture=imgTexture;

那么,这条线到底做了什么?据我所知,它将类变量应用与局部变量(传递到方法中)相同的值,但是,显然还有更多事情正在发生。它真的创建了一个全新的位图吗?如果是,为什么登录时名称相同?

最佳答案

此行将实例成员 imgTexture 设置为引用同一对象,该对象的引用已传递给该方法。

this.imgTexture=imgTexture;   

此行将传递给方法的引用设置为 null,这不会更改 this.imgTexture

imgTexture=null;

也许你想把它替换成

this.imgTexture=null;

如果您希望对象不再包含对该位图的引用。

关于Java 变量范围 - 复制位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30691872/

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