奇怪的Delphi Android图像分配/图像乱码问题
我有一些代码在iOs中运行良好,但在Android上会导致完全混乱的图像。我发现了一个局部解决方案(不调用某些代码),但它暗示了一些严重错误:奇怪的Delphi Android图像分配/图像乱码问题,android,delphi,delphi-xe7,timage,tbitmap,Android,Delphi,Delphi Xe7,Timage,Tbitmap,我有一些代码在iOs中运行良好,但在Android上会导致完全混乱的图像。我发现了一个局部解决方案(不调用某些代码),但它暗示了一些严重错误: // some bitmap object buffer for mainthread only R.BitmapRef := FPersistentBitmapBuffer; // this TImage now contains the original wrongly sized bitmap ImageBackground.Bitmap.Ass
// some bitmap object buffer for mainthread only
R.BitmapRef := FPersistentBitmapBuffer;
// this TImage now contains the original wrongly sized bitmap
ImageBackground.Bitmap.Assign(R.BitmapRef);
// calculated somewhere
TmpNewWidth := 500;
TmpNewHeight := 500;
// draw the bitmap resized to wanted size
R.BitmapRef.Width := Round(TmpNewWidth);
R.BitmapRef.Height := Round(TmpNewHeight);
R.BitmapRef.Canvas.BeginScene();
R.BitmapRef.Canvas.DrawBitmap(ImageBackground.Bitmap, RectF(0,0,ImageBackground.Bitmap.Width,ImageBackground.Bitmap.Height), RectF(0,0,TmpNewWidth,TmpNewHeight), 1);
R.BitmapRef.Canvas.EndScene();
// assign it back to the image
ImageBackground.Bitmap.Assign(R.BitmapRef);
// THIS code causes the image shown in TImageBackground to look completely garbled ... which would indicate something is shareing memory/reference somewhere somehow... There is more odd behavior like debugger unhooking (it seems) if mouse in Delphi debugger hovers over ImageBackground.Bitmap - no error is reported
R.BitmapRef.Clear(TAlphaColorRec.White);
可以看出,这是把事情搞砸的最后一行。在一些测试中,这似乎足以消除he线,但在其他测试中则不行。这是我最好的线索/描述/问题示例
下面是一个乱码图像的示例。因为每次我运行应用程序时,它们看起来都像是乱码,所以我怀疑它一定与图像有某种关联,但在视觉上没有任何相似之处
我的问题是什么可能是错的?我正在测试Delphi XE7试用版,因此无法访问源代码。它在使用XE4和XE7的iOS上运行得非常完美,但在安卓系统上,情况正在好转。我想可能是一些位图数据共享了一个引用。。。有人对如何测试这个理论/可能的解决方法有什么想法吗?这显然是错误的。我建议你在
尝试使用CopyFromBitmap而不是“分配”。这将创建图像的唯一副本。如果调用
MyBitmap.Map(TMapAccess.Write,MyBitmapData),还将获得一个新的唯一图像
后跟MyBitmap.UnMap(MyBitmapData)代码>我假设投票结束你的问题是“不清楚你在问什么”,因为从技术上讲,你没有问任何问题。虽然我假设你的问题是“如何解决这个问题?”但我现在已经添加了这个问题——事实上你是对的——我的问题是如何调试/解决/修复上述问题,因为我很迷茫。你还可以包括一个屏幕截图。另外,您是在不同的设备上测试还是只在模拟器上测试?今天晚些时候我将提供屏幕截图。我已经在我的华为P6手机上进行了测试,现在添加了屏幕截图:)你的解决方案似乎解决了问题:)我不介意将其作为错误报告提交,如果更多的可以复制它发生的确切情况。不管怎样,我已经赏金了。非常感谢!:)虽然获得了赏金,但即使使用新代码,问题也没有完全解决。我希望其他能够看到源代码的人能够复制它并将其报告给EmbarcadeRoi如果您使用ImageBackground.Bitmap.SaveToFile
将图像保存到文件中,它看起来是否混乱?如果使用Bitmap.Canvas.FillRect([…]),会发生什么代码>而不是清除?