আমার প্রোজেক্টে আমার একটি রিসোর্স / myimage.jpg এ সঞ্চিত আছে। আমি কীভাবে এই চিত্রটি বিটম্যাপ অবজেক্টে গতিশীলভাবে লোড করতে পারি?
আমার প্রোজেক্টে আমার একটি রিসোর্স / myimage.jpg এ সঞ্চিত আছে। আমি কীভাবে এই চিত্রটি বিটম্যাপ অবজেক্টে গতিশীলভাবে লোড করতে পারি?
উত্তর:
আপনি কি উইন্ডোজ ফর্ম ব্যবহার করছেন? আপনি যদি সম্পত্তি / সংস্থানগুলি ইউআই ব্যবহার করে ছবিটি জুড়ে থাকেন তবে উত্পন্ন কোড থেকে আপনি ছবিটিতে অ্যাক্সেস পেতে পারেন, তাই আপনি কেবল এটি করতে পারেন:
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
আপনি নিম্নলিখিত উপায়ে চিত্রটির একটি রেফারেন্স পেতে পারেন:
Image myImage = Resources.myImage;
আপনি যদি ছবিটির একটি অনুলিপি তৈরি করতে চান তবে আপনাকে নিম্নলিখিতগুলি করতে হবে:
Bitmap bmp = new Bitmap(Resources.myImage);
আপনি যখন এটি শেষ করেছেন তখন বিএমপি নিষ্পত্তি করতে ভুলবেন না । আপনি যদি সংকলন সময়ে রিসোর্স চিত্রটির নাম না জানেন তবে আপনি কোনও সংস্থান পরিচালক ব্যবহার করতে পারেন:
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
রিসোর্সস ম্যানেজারের সুবিধা হ'ল আপনি এটি ব্যবহার করতে পারেন যেখানে রিসোর্স.মাই আইমেজ সাধারণত সুযোগের বাইরে থাকে, বা আপনি যেখানে গতিশীলভাবে সংস্থানগুলি অ্যাক্সেস করতে চান। অতিরিক্তভাবে, এটি শব্দ, কনফিগারেশন ফাইল ইত্যাদির জন্য কাজ করে
আপনার এটিকে রিসোর্স স্ট্রিম থেকে লোড করা দরকার।
Bitmap bmp = new Bitmap(
System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceStream("MyProject.Resources.myimage.png"));
আপনি যদি আপনার সমাবেশে সমস্ত সংস্থার নাম জানতে চান তবে সাথে যান:
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}
typeof(this).Assembly
সংক্ষিপ্ত জন্য ব্যবহার করতে পারেন ।
typeof(this)
কাজ করবে না। this.GetType().Assembly
আপনি যা বলেছিলেন তার নিকটতম, তবে এটি ঝুঁকিপূর্ণ কারণ এটি উত্তরাধিকার সূত্রে প্রাপ্ত সুপারক্লাসটি বেছে নেবে যা কোনও ভিন্ন সমাবেশে থাকতে পারে।
typeof(this);
সংকলন করে না আপনি পেয়েছেনError 1 Type expected
প্রস্তাবিত উত্তরগুলির চেয়ে বেশিরভাগ উপায় সহজ
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
Bitmap
বস্তুও চেয়েছিলেন , কোনও Image
বস্তু নয়।
কোডটি আমি আমার বেশ কয়েকটি প্রকল্পে ব্যবহার করি ... এটি ধরে নেওয়া হয় যে আপনি কেবলমাত্র বিটম্যাপ হিসাবে আইকন হিসাবে নয় সংস্থানগুলিতে চিত্রগুলি সঞ্চয় করেন
public static Bitmap GetImageByName(string imageName)
{
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string resourceName = asm.GetName().Name + ".Properties.Resources";
var rm = new System.Resources.ResourceManager(resourceName, asm);
return (Bitmap)rm.GetObject(imageName);
}
প্রকল্পের রিসোর্স সেটিংসে ইমেজ রিসোর্স হিসাবে যুক্ত করা ভাল জিনিস thing তারপরে আপনি রিসোর্স.মাইমেজ করে সরাসরি চিত্রটি পেতে পারেন। এটি উত্পন্ন সি # সম্পত্তি এর মাধ্যমে চিত্রটি পাবে।
আপনি যদি সবেমাত্র এম্বেডেড রিসোর্স হিসাবে চিত্রটি সেট করেন তবে আপনি এটি সহ পেতে পারেন:
string name = "Resources.myimage.jpg"
string namespaceName = "MyCompany.MyNamespace";
string resource = namespaceName + "." + name;
Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);
Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource));
যেখানে MyTypeFromSameAsorsesAsResource আপনার সমাবেশে যে কোনও ধরণের রয়েছে।
একের নীচে ব্যবহার করুন। আমি এটি উইন্ডোজ ফর্মের গ্রিড ভিউ সেল দিয়ে পরীক্ষা করেছি।
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
"রিসোর্স_সামগ্রী" এর নাম, আপনি প্রকল্পটি থেকে খুঁজে পেতে পারেন।
প্রকল্পের নাম অনুসারে আপনি এটি সন্ধান করতে পারেন Properties
। এটি প্রসারিত করুন। সেখানে আপনি Resources.resx
ফাইল দেখতে পারেন । ইহা খোল. আপনার ফাইলের নামটি "রিসোর্স_সামগ্রহ" হিসাবে প্রয়োগ করুন।
সাথে এবং ইমেজবক্স নামের সাথে "ইমেজপ্রিভিউ ফর্মস্ট্রিংস। মাইমাজেমনেমস একটি নিয়মিত গেট / সেট স্ট্রিং কাস্ট পদ্ধতি রয়েছে যা স্ক্রোলবক্স টাইপ তালিকার সাথে যুক্ত। ছবিগুলিতে .bmp শেষগুলি বাদে তালিকায় লিঙ্কযুক্ত নামগুলির মতো একই নাম রয়েছে All সমস্ত বিটম্যাপগুলি টেনে নেওয়া হয়
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
আমার ক্ষেত্রে - আমি ব্যবহার করছিলেন আইকন আমার রিসোর্স, কিন্তু আমি তাদের পরিবর্তনশীল যোগ করার জন্য প্রয়োজন চিত্র কিছু ToolStripMenuItem
(গুলি)। সুতরাং আমি যে পদ্ধতিতে তৈরি করেছি (যা নীচে কোড স্নিপেট থেকে এসেছে), আমার যোগ করার জন্য আমি তাদের আইটেম সংস্থানগুলি বিটম্যাপে রূপান্তর করতে হয়েছিল MenuItem
।
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
আরও কিছু সচেতন হওয়ার মতো বিষয়, আপনি যখন আপনার উত্সটিতে যোগ করার সময় আপনার চিত্র / আইকনটির নামে ফাঁকা স্থান ("") থাকে, ভিএস স্বয়ংক্রিয়ভাবে সেই স্থানগুলি "_" (গুলি) এর সাথে প্রতিস্থাপন করে। কারণ, আপনার সংস্থানটির নামকরণ করার সময় স্পেসগুলি কোনও বৈধ চরিত্র নয়। যে কারণে আমি Replace()
আমার রেফারেন্স কোডটিতে পদ্ধতিটি ব্যবহার করছি । আপনি সম্ভবত এই লাইনটি উপেক্ষা করতে পারেন।
আমার পরামর্শ:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);
এমএসডিএন থেকে: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
চিত্র.ফ্রিম স্ট্রিম ব্যবহার করা আরও ভাল কারণ আপনাকে চিত্রটির ফর্ম্যাটটি জানতে হবে না (বিএমপি, পিএনজি, ...)।
জেডিএসের উত্তরটি সবচেয়ে ভাল কাজ করেছে। সি # উদাহরণ লোড করা চিত্র:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
নিম্নলিখিতগুলি নোট করুন:
উদাহরণ কোড লাইনটি ভিজুয়ালস্টুডিও 2015 সম্প্রদায়টি সফলভাবে চালিত হয়।
আশ্চর্যজনকভাবে যথেষ্ট, ডিজাইনারে হাঁসফাঁস করা থেকে আমি খুঁজে পাই যা অনেক সহজ পদ্ধতির বলে মনে হচ্ছে:
ছবিটি প্রযোজনা.সম্পাদনা থেকে উপলব্ধ বলে মনে হচ্ছে।
আমি কেবল একটি চিত্র ব্যবহার করছি কারণ আমি আগ্রহী সমস্ত এটির কোনও চিত্রের সাথে এটি একটি নিয়ন্ত্রণে আটকানো is
(নেট 4.0, ভিএস 2010।)
আমি আমার একটি প্রকল্পের ডিজাইনার কোডটি দেখেছি এবং লক্ষ্য করেছি যে এটি এই স্বরলিপিটি ব্যবহার করেছে
myButton.Image = global::MyProjectName.Properties.Resources.max;
যেখানে প্রকল্পটিতে আমি আপলোড করা সংস্থানটির সর্বাধিক নাম।
অথবা ডাব্লুপিএফ বা সিলভারলাইটের সাথে কাজ করার সময় আপনি এই লাইনটি ব্যবহার করতে পারেন, বিশেষত যেখানে এক্সএএমএল মার্কআপে ইতিমধ্যে আপনার উত্সের স্ট্রিং রয়েছে:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
যেখানে চিত্রপথটি এমন কিছু:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(444, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost");
ToolStripButton btn = new ToolStripButton("m1");
btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
btn.Image = (Image)O;
this.toolStrip1.Items.Add(btn);