Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的Delphi Android图像分配/图像乱码问题_Android_Delphi_Delphi Xe7_Timage_Tbitmap - Fatal编程技术网

奇怪的Delphi 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

我有一些代码在iOs中运行良好,但在Android上会导致完全混乱的图像。我发现了一个局部解决方案(不调用某些代码),但它暗示了一些严重错误:

// 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([…]),会发生什么而不是清除?