c# - স্ক্রিপ্টের মাধ্যমে টেক্সচার 2 ডি পঠনযোগ্য কীভাবে তৈরি করবেন



unity3d texture2d (1)

এই কাজটি করার দুটি পদ্ধতি আছে:

1। RenderTexture ব্যবহার RenderTexture (প্রস্তাবিত):

RenderTexture ব্যবহার করুন। Graphics.Blit সহ RenderTexture Texture2D উত্স Texture2D রাখুন Texture2D

Texture2D duplicateTexture(Texture2D source)
{
    RenderTexture renderTex = RenderTexture.GetTemporary(
                source.width,
                source.height,
                0,
                RenderTextureFormat.Default,
                RenderTextureReadWrite.Linear);

    Graphics.Blit(source, renderTex);
    RenderTexture previous = RenderTexture.active;
    RenderTexture.active = renderTex;
    Texture2D readableText = new Texture2D(source.width, source.height);
    readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
    readableText.Apply();
    RenderTexture.active = previous;
    RenderTexture.ReleaseTemporary(renderTex);
    return readableText;
}

ব্যবহার :

Texture2D copy = duplicateTexture(sourceTextFromPlugin);

এটি কাজ করা উচিত এবং কোনও ত্রুটি ছোঁড়া উচিত নয়।

2। Texture2D.GetRawTextureData() 2 Texture2D.GetRawTextureData() + Texture2D.LoadRawTextureData() 2 Texture2D.GetRawTextureData() ব্যবহার করুন Texture2D.GetRawTextureData() Texture2D.LoadRawTextureData() :

GetPixels32() Texture2D পঠনযোগ্য নয় বলে আপনি GetPixels32() ব্যবহার করতে পারবেন না। আপনি GetRawTextureData() ব্যবহার সম্পর্কে এতটা কাছাকাছি ছিলেন।

যখন আপনি Texture2D.LoadImage() ব্যবহার Texture2D.LoadImage() তখন Texture2D.LoadImage() থেকে লোড করতে ব্যর্থ হয়েছিলেন।

Texture2D.LoadImage() কেবল টেক্সচার 2 ডি অ্যারে বাইট নয় পিএনজি / জেপিজি অ্যারে বাইট লোড করতে ব্যবহৃত হয়।

আপনি যদি Texture2D.GetRawTextureData() দিয়ে পড়ে থাকেন তবে আপনাকে অবশ্যই Texture2D.LoadRawTextureData() দিয়ে লিখতে হবে Texture2D.LoadRawTextureData() নয়।

Texture2D duplicateTexture(Texture2D source)
{
    byte[] pix = source.GetRawTextureData();
    Texture2D readableText = new Texture2D(source.width, source.height, source.format, false);
    readableText.LoadRawTextureData(pix);
    readableText.Apply();
    return readableText;
}

সম্পাদকে উপরের কোডের সাথে কোনও ত্রুটি থাকবে না তবে স্বতন্ত্র বিল্ডে ত্রুটি থাকতে হবে। এছাড়াও এটি স্ট্যান্ড স্টোন বিল্ডে ত্রুটি থাকা সত্ত্বেও এখনও কাজ করা উচিত। আমি মনে করি যে ত্রুটিটি আরও একটি সতর্কতার মতো।

আমি আপনাকে # 1 পদ্ধতিটি এটি করার জন্য ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি কোনও ত্রুটি ছুঁড়ে না ফেলে।

আমি গ্যালারি থেকে লোড হওয়া কিউআর চিত্রটি ডিকোড করতে সক্ষম করতে চাই, একটি টেক্সচার 2 ডি হিসাবে চিত্রটি অনুসন্ধান এবং লোড করার জন্য আমি একটি প্লাগিন পেয়েছি, তবে এই কিউআর কোডটি ডিকোড করতে, টেক্সচার 2 ডিটি পাঠযোগ্য / লিখনযোগ্য হতে হবে, এবং আমি চেক করেছি প্লাগইনটি, অ্যান্ড্রয়েডের জন্য এটি একটি জারের সাথে স্টাফ অন্বেষণ এবং লোড করছে এবং আইওএস প্ল্যাটফর্মে এটি একটি প্যাকেজযুক্ত লাইব্রেরি ব্যবহার করছে, সুতরাং আমার কাছে লিবের কোডে অ্যাক্সেস নেই,

আমি উত্তরটি সন্ধান করেছি, সর্বাধিক সমাধানটি ছিল ইউনিটি ইন্সপেক্টরটিতে টেক্সচারের আমদানি করার সেটিংস পরিবর্তন করা, তবে যেহেতু এটি কোড দ্বারা লোড করা একটি টেক্সচার তাই এর জন্য কোনও পরিদর্শক সেটিং উপলব্ধ নেই, তাই আমার প্রশ্নটি হ'ল:

কোড দ্বারা এই বোঝা টেক্সচারটি পড়া / লেখার কোনও উপায় আছে কি? লিব কোড অ্যাক্সেস না করে?

ধন্যবাদ

এই প্লাগইনটি দিয়ে টেক্সচারটি পেতে পারে এমন কোডটি এখানে

void OnImageLoad(string imgPath, Texture2D tex, ImageAndVideoPicker.ImageOrientation imgOrientation)
{
    Debug.Log("Image Location : " + imgPath);
    Debug.Log("Image Loaded : " + imgPath);
    texture = tex;
    Texture2D readableText = new Texture2D(tex.width, tex.height);
    readableText.LoadImage(tex.GetRawTextureData());

    string url = QRCodeDecodeController.DecodeByStaticPic(readableText);
    StartCoroutine(GetSceneAndLoadLevel(url));
}

আপনি দেখতে পাচ্ছেন, আমি এই উত্তরটি চেষ্টা করেছি তবে কোনও ভাগ্য পাইনি।

এবং এখানে ত্রুটিটি অ্যান্ড্রয়েড দ্বারা দেখানো হয়েছে:

06-23 21:47:32.853: I/Unity(10557): (Filename: D Line: 0)
06-23 21:47:33.784: E/Unity(10557): Texture needs to be marked as Read/Write to be able to GetRawTextureData in player
06-23 21:47:33.784: E/Unity(10557): UnityEngine.Texture2D:GetRawTextureData()
06-23 21:47:33.784: E/Unity(10557): TestQR:OnImageLoad(String, Texture2D, ImageOrientation) (at D:\Unity Projects\nnkp\Assets\Scripts\QR\TestQR.cs:123)
06-23 21:47:33.784: E/Unity(10557): <LoadImage>c__Iterator0:MoveNext()
06-23 21:47:33.784: E/Unity(10557): UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
06-23 21:47:33.784: E/Unity(10557): [./artifacts/generated/common/runtime/TextureBindings.gen.cpp line 512] 

দ্রষ্টব্য :

সোর্স Texture2D একটি প্লাগইন থেকে আসছে, আমি এটিকে সম্পাদক থেকে সক্ষম / পঠন / লিখতে সেট করতে পারি না বা সম্পাদকের TextureImporter.isReadable পরিবর্তনশীলটি ব্যবহার করতে পারি না।





texture2d