2014-12-23 11 views
2

나는 잘 작동하지만, 안드로이드에서 완전히 엉망이 된 이미지를 가져 오는 코드가 있습니다. 나는 부분 해결 (일부 코드를 호출하지 않음) 발견,하지만 뭔가 끔찍한 잘못 힌트 :이상한 델파이 안드로이드 이미지 할당/이미지 왜곡 된 문제

// 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); 

에서 볼 수있는 바와 같이 , 그것은 그것을 엉망으로 마지막 줄. 일부 테스트에서는 라인을 제거하는 것으로 충분하지만 다른 라인에서는 제거하지 않는 것으로 보입니다. 이것은 내 최고의 리드/설명/문제의 예입니다.

다음은 왜곡 된 이미지의 모양을 보여주는 예입니다. 앱을 실행할 때마다 동일한 방식으로 문자가 깨져 보이기 때문에 이미지와 관련이 있어야한다고 생각하지만 시각적 유사성은 없습니다.

enter image description here 내 질문에 무엇이 잘못되었을 수 있습니까? Delphi XE7 평가판을 테스트 중이므로 소스에 액세스 할 수 없습니다. 그것은 XE4와 XE7을 사용하여 iOS에서 완벽하게 작동했지만 안드로이드는 무언가 진행되고 있습니다. 나는 그것이 아마도 참조를 공유하는 비트 맵 데이터 일 수 있다고 생각하고 있습니다 ... 누군가가이 이론/가능한 해결 방법을 테스트하는 방법에 대한 아이디어가 있습니까?

+1

나는 기술적으로 당신이 여기에 어떤 질문도하지 않기 때문에 "당신이 묻고있는 것이 확실하지 않습니다"라는 질문을 닫을 투표를한다고 가정합니다. 귀하의 질문은 "이 문제를 해결하는 방법"이라고 가정합니다. –

+0

나는 지금 질문을 추가했다 - 그리고 실제로 당신이 맞다 - 내 질문은 디버그/해결/문제를 해결하는 방법입니다. – Tom

+0

스크린 샷을 포함 할 수도 있습니다. 또한, 다른 장치 또는 에뮬레이터에서만 테스트 했습니까? – mjn

답변

2

분명히 잘못되었습니다. 나는 당신이 버그 보고서를 작성 하시길 권합니다 http://quality.embarcadero.com

"할당"대신 CopyFromBitmap을 사용해보십시오. 이렇게하면 고유 한 이미지 사본이 생성됩니다. MyBitmap.Map(TMapAccess.Write, MyBitmapData);을 입력 한 다음 MyBitmap.UnMap(MyBitmapData);을 입력하면 새 고유 이미지가 나타납니다.

+0

해결 방법이 나타납니다 :) – Tom

+0

더 많은 정보가 중복 될 수 있다면 버그 리포터로 제출해도 좋을 것입니다. 어쨌든, 나는 현상금을 수여했다. 정말 고맙습니다! :) – Tom

+0

바운티가 수여되었지만 새로운 코드로도 문제가 완전히 해결되지 않았습니다. 소스를 볼 수있는 다른 누군가가 그것을 재현하여 엠바 카데로에보고 해 주길 바랍니다. – Tom