需要幫助(對不起,我的英語水平)。
游戲有檔案生成器(制作關卡檔案)。我更新資產,添加保存 jpg 到檔案的功能。在那場比賽之后讀取檔案并從中制作影像。
我的步驟:
- settings.imageCode = colouredTexture.EncodeToJPG();
- 保存到檔案:
if (settings.rastr)
{
bytes.AddRange(System.BitConverter.GetBytes(settings.imageCode.Length));
bytes.AddRange(settings.imageCode);
}
- 開始游戲。游戲讀取關卡檔案(關于 img 的部分):
private byte[] GetSprite() private byte[] GetSprite()
{
int length = GetNextInt();
ArraySegment<byte> byteImage = new ArraySegment<byte>(levelFileBytes, byteIndex, length);
byteIndex = length;
int count = byteImage.Count;
return byteImage.Array;
}
- 嘗試創建精靈并將其添加到 GO:
private void CreateRastrImage(LevelFileData levelFileData)
{
GameObject imageObj = new GameObject("Rastr");
RectTransform containerRectT = imageObj.AddComponent<RectTransform>();
containerRectT.SetParent(transform, false);
// Expand to fill
containerRectT.anchoredPosition = Vector2.zero;
containerRectT.anchorMin = Vector2.zero;
containerRectT.anchorMax = Vector2.one;
containerRectT.offsetMax = Vector2.zero;
containerRectT.offsetMin = Vector2.zero;
Image sprite = imageObj.AddComponent<Image>();
Texture2D spriteColor = new Texture2D(levelFileData.imageWidth, levelFileData.imageHeight);
//ImageConversion.LoadImage(spriteColor, levelFileData.rastrBytes);
spriteColor.LoadImage(levelFileData.rastrBytes);
Sprite fileSptire = Sprite.Create(spriteColor, new Rect(0f, 0f, spriteColor.width, spriteColor.height), new Vector2(0f, 0f));
sprite.sprite = fileSptire;
}
- 結果:紅色問號
關于結果,source img 其這個 jpg 檔案:圖片 使用 jpg (RGB24),也嘗試另一種 TextureFormat。我認為閱讀有問題(img 沒有被填滿),但我在 VS 中停止 poing 來檢查長度。幫助家伙,謝謝你!
uj5u.com熱心網友回復:
問題出在 ArraySegment 中。當我嘗試回傳 byteImage.Array - 它回傳完整陣列 (levelFileBytes)。我現在的解決方案:
private byte[] GetSprite()
{
int length = GetNextInt();
byte[] imageBytes = new byte[length];
for(int i = 0; i < length; i )
{
imageBytes[i] = levelFileBytes[byteIndex i];
}
byteIndex = length;
return imageBytes;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371809.html
