একটি চিত্র ফাইলের জন্য মেমরির প্রয়োজনীয়তাগুলি বোঝা


9

আমি 240x400 রেজোলিউশন ডিসপ্লেতে প্রদর্শিত হওয়া ইমেজ রিসোর্স ফাইলগুলির মেমরির প্রয়োজনীয়তাগুলি বুঝতে চাই।

ডিসপ্লেতে নিম্নলিখিত চশমা রয়েছে:

চশমা

এটি 18 বিট রঙের গভীরতা পর্যন্ত সমর্থন করে এবং ILI9327 ডিসপ্লে ড্রাইভার ব্যবহার করে।

ধরে নিলাম যে আমার 50 মাপের 10 মিমি এক্স 10 মিমি আকারের বিভিন্ন আইকন প্রদর্শন করা দরকার, স্টোরেজ স্পেসটি কী প্রয়োজন?

এখানে আমার গণনা:

মিমি = 400 / 61.2 = 6.536 প্রতি পিক্সেল

একটি ছবিতে পিক্সেলের সংখ্যা = 65.36 x 65.36 = 4272 পিক্সেল

প্রতিটি পিক্সেলের জন্য 18 বিট এক্স 3 প্রয়োজন হবে (আর, জি এবং বি এর জন্য) = 54 বিট

মোট বিটগুলি প্রয়োজন = 4272 x 54 = 230688 বিট = 28.16 কিলোবাইট

50 টি চিত্রের জন্য আমার প্রয়োজন 1.375 মেগাবাইট স্টোরেজ।

আমার হিসেব কি সঠিক?


2
আপনি উচ্চ স্তরের সঞ্চয়স্থান প্রয়োজনীয়তা গণনা করছেন। সাধারণত চিত্রগুলি সংকুচিত হয় এবং প্রায়শই একটি কম-সংকুচিত ফাইল থেকে অতিরিক্ত বাইটগুলি পড়ার চেয়ে ফ্লাইতে (এসডি-কার্ড বলতে বলা থেকে) পড়া এবং ডিকম্প্রেস করা দ্রুত হয়। এটি প্রায়শই কারণ আই / ও ডিভাইসটি একটি বাধা।
কিংসলে

উত্তর:


17

মিমি = 400 / 61.2 = 6.536 প্রতি পিক্সেল

হা.

একটি ছবিতে পিক্সেলের সংখ্যা = 65.36 x 65.36 = 4272 পিক্সেল

ওয়েল, আপনি প্রতি আইকন পিক্সেল মানে। তবুও, আপনি ভগ্নাংশ পিক্সেল উত্পাদন করতে পারবেন না, সুতরাং আপনার সংখ্যা হয় হয় 65 x 65 বা 66 x 66 হওয়া উচিত এবং এটি আরও সরলকরণের দিকে নিয়ে যায় to কেন আপনার আইকনগুলি 64 x 64 তৈরি করবেন না? এটি আপনার মেমরির জন্য ঠিকানা গণনাগুলিকে সহজ করবে এবং কেবলমাত্র 2% এর "সঙ্কুচিত" উত্পাদন করবে। এবং আমাকে বিশ্বাস করুন, এই আকারে কেউ খেয়াল করবে না। তারপরে আপনার আইকনগুলি 4096 পিক্সেল আকারের হবে।

প্রতিটি পিক্সেলের জন্য 18 বিট এক্স 3 প্রয়োজন হবে (আর, জি এবং বি এর জন্য) = 54 বিট

নাঃ। জেএমএস ঠিক উত্তর হিসাবে, এটি পিক্সেল মোট প্রতি 18 বিট, বা রঙ প্রতি 6 বিট। আবার, যদিও আপনার বিট স্তরটি সম্পর্কে যথেষ্ট চিন্তা করা উচিত নয়। রঙের পৃথক বাইট সহ আংশিক বাইট (6 বাইট প্রতি বিট) হিসাবে আপনার রঙের মান সংরক্ষণ করুন। এটিতে 33% বেশি মেমরি লাগবে, তবে মেমরি থেকে স্ক্রিনে স্থানান্তরিত করার সময় আপনার প্রসেসিং লোডটি হ্রাস করবে।

মোট বিটগুলি প্রয়োজন = 4272 x 54 = 230688 বিট = 28.16 কিলোবাইট

মোট বিট 4096 x 24 বা 98304 বিট বা 12288 বাইট।

50 টি চিত্রের জন্য আমার প্রয়োজন 1.375 মেগাবাইট স্টোরেজ।

12288 বার 50 614400 বাইট দেয়।


1
তবে অবশ্যই যদি আমরা অবিচ্ছিন্ন স্টোরেজ সম্পর্কে কথা বলি তবে আপনি কী আপনার আইকনগুলি পিএনজি বা জেপিজি হিসাবে সংকুচিত করবেন? বা যদি আমরা ফ্রেমবফার কথা বলছি তবে এটি কেবল (display_width * display_height * bpp) / 8বাইটস?
অ্যারোথ

@ অ্যারোথ - এটি আপনাকে ব্যবসায়ের ক্ষেত্রগুলিতে স্কোয়ার করে দেয়। মেমরির আকার বা প্রক্রিয়াকরণের চাহিদাগুলির চেয়ে আরও গুরুত্বপূর্ণ কী? সঙ্কুচিত চিত্রগুলির জন্য যেতে বড় ফাইলের ব্যয়ে স্ক্রিনে মূলত বেদনাদায়ক স্থানান্তরকে অনুমতি দেয়। বৃহত্তর শব্দ থেকে রঙের ডেটা আনপ্যাক করার প্রয়োজন ছাড়াই এটি আরও সহজ। সংক্ষিপ্ত চিত্রটি আনপ্যাক করা এবং / বা রঙের সারণী প্রয়োগ করা অনেক ছোট ডেটা ফাইলগুলিকে মঞ্জুরি দেয় তবে প্রসেসিংয়ের প্রচেষ্টাটি কোনও নবজাতকের জন্য ভয়ঙ্কর হতে পারে। এটি সবগুলি অগ্রাধিকার এবং স্বাদের বিষয়।
হোয়াটআরবিস্ট

11

আইকনগুলি ×৪ × p৪ পিক্সেল তৈরি করে নিজের জন্য জীবনকে সহজ করুন। আপনি যদি আরও বড় দেখতে চান তবে তাদের চারপাশে একটি সীমানা আঁকুন।

16-বিট রঙিন ফর্ম্যাট সহ, এটির জন্য প্রতি আইকনটিতে 8 কেবি বা 50 এর সেটের জন্য 400 কেবি প্রয়োজন।

সংক্ষেপণের একটি সাধারণ ফর্ম হ'ল প্রতিটি পিক্সেলের রঙ সরাসরি সংরক্ষণের পরিবর্তে রঙিন টেবিল ব্যবহার করা। আইকনটির জন্য 16 টি রঙগুলি প্রায়শই বেশি হয়, বিশেষত আপনি যদি কিছুটা সৃজনশীল স্রোত প্রয়োগ করেন। এটি স্টোরেজকে কম প্রতি আইকন 2 কেবি, রঙ টেবিলের জন্য 32 বাইটে হ্রাস করে। প্রতিটি আইকনটির নিজস্ব রঙের টেবিল থাকলে মোট সঞ্চয়স্থান 101 কেবি এর কিছুটা কম।


কেবল নিজের কৌতূহল মেটাতে আমি নীচের "সবচেয়ে খারাপ পরিস্থিতি" চিত্রটি এখান থেকে পেয়েছি (এখান থেকে ):

রঙের শক্তি

এই ইমেজম্যাগিক কমান্ড লাইন

convert image.jpg -crop 267x267+66+0 -resize 64x64 -colors 16 final.png

এটি এ পরিণত:

এখানে চিত্র বর্ণনা লিখুন

খারাপ নয়, এবং অবশ্যই রঙের আরও সীমিত পরিসরের উত্স চিত্রগুলি আরও ভাল বেরিয়ে আসবে। উদাহরণস্বরূপ, এখানে ওলিন, একইভাবে প্রক্রিয়া করা হয়েছে:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


2
কীওয়ার্ড: ইনডেক্সড রঙ । উদাহরণস্বরূপ, যদি বিটম্যাপে 16 টি রং পর্যাপ্ত না হয় তবে আপনি আইকনটিকে কয়েকটি ছোট বিটম্যাপে বিভক্ত করতে পারেন, প্রতিটি একটি আলাদা প্যালেট দিয়ে। অন্যদিকে আবেদন করাও সাহায্য করতে পারে।
জেএমএস

9

রঙ গভীরতা সম্পর্কে আরও

ডেভ টোয়েডের উত্তরটি প্রসারিত করে, তিনি যা দেখিয়েছিলেন তার থেকে আপনি আরও ভাল করতে পারেন।

এখানে তিনি একই আকারের বড় আকারের ব্যবহার করেছেন:

বর্গক্ষেত্রের আকারে সঙ্কুচিত হয়ে 64৪ x 64৪ পিক্সেলকে সঙ্কুচিত করা হয়েছে তবে পূর্ণ (লাল প্রতি 8 বিট, গ্রান, ব্লু) রঙের ফলন ব্যবহার করে:

চ্যানেল প্রতি 8 টি বিট থেকে 6 বিটের ফলাফলের বর্ণের রঙটি ফলাফল:

আপনার ডিসপ্লেটি এটিই করতে পারে, যেহেতু আপনি বলছেন যে এটি 18 বিটের রঙের গভীরতা সমর্থন করে।

মোট 16 বিট / পিক্সেল ফলনের জন্য রঙের তথ্যকে আরও 5 বিট, রেডের জন্য 6, সবুজ রঙের জন্য 6 এবং নীল রঙের 5 টি করে দেওয়া হয়েছে:

আইকনগুলির জন্য এটি যথেষ্ট পরিমাণে ভাল হওয়া উচিত।

এমনকি কোনও সংক্ষেপণ ছাড়াই, এই ফর্ম্যাটটির আইকনগুলি কেবলমাত্র x৪ x x৪ x ২ = ৮৯২২ বাইট নেয়। এই জাতীয় 50 টি চিত্রের 409,600 বাইট প্রয়োজন।


2
আমার চিত্রটি প্রতি পিক্সেল 4 বিট (16 টি রঙ) -তে সঙ্কলিত হয়েছে - প্রতি আইকন 2k বাইট, এবং একটি 32-বাইট অনুসন্ধান সারণী। আমি দেখতে চাইছি সীমিত রঙের রঙের সাথে কী দুর্যোগ দেখাচ্ছে।
ডেভ টুইট করেছেন

যেহেতু আমরা বিভিন্ন বর্ণের গভীরতার সাথে তুলনা করছি, তাই 8 বিট রঙিন মানচিত্রের সাথে একটি যুক্ত করার জন্য যত্নশীল? আমাদের এখানে ইতিমধ্যে 4-বিট এবং 16-বিট ভেরিয়েন্টের মধ্যে এটি অর্ধেক (লোগারিথেমিকভাবে) হবে।
ইলকচাচু

@ ডেভ: এটি আপনার উত্তর থেকে পরিষ্কার ছিল না, তবে এটি মরসুমে নিদর্শনগুলি ব্যাখ্যা করে।
অলিন ল্যাথ্রপ

8

প্রতিটি পিক্সেলের জন্য 18 বিট এক্স 3 প্রয়োজন হবে (আর, জি এবং বি এর জন্য) = 54 বিট

আপনার অনুমানটি ভুল। "18 বিট" মান প্রতি পিক্সেল হয় , রঙ প্রতি নয়। লাল, সবুজ এবং নীল চ্যানেলগুলির প্রত্যেকের সর্বাধিক বিট গভীরতা 6 বিট (64 different টি বিভিন্ন মান), মোট 18 বিট have
এই ডিসপ্লে কন্ট্রোলার এছাড়াও একটি 16 বিট মোড সমর্থন করে (যেখানে পিক্সেল ডেটা কেবল লাল জন্য 5 বিট, সবুজ জন্য 6 এবং নীল জন্য 5 টি) যা প্রতিটি পিক্সেলকে মাত্র দুটি বাইটে প্যাক করা সহজ করে তোলে। এটি বিটম্যাপগুলি দক্ষতার সাথে সঞ্চয় করা সহজ করে তোলে এবং প্রতি সেকেন্ডে ডিসপ্লেতে আপনি যে পিক্সেল লিখতে পারেন তার পরিমাণ বাড়িয়ে তোলে।

এখানে চিত্র বর্ণনা লিখুন

একটি ছবিতে পিক্সেলের সংখ্যা = 65.36 x 65.36 = 4272 পিক্সেল

আপনি ব্যবহারিকভাবে ভগ্নাংশ পিক্সেল সংরক্ষণ করতে পারবেন না , সুতরাং আপনার আসল বিটম্যাপগুলি (চিত্র / স্প্রিট / অক্ষর / যাই হোক না কেন) সম্ভবত 65 2 = 4225 পিক্সেল হবে।

সহজ রুট (16 বিট আর 5 জি 6 বি 5 পিক্সেল ফর্ম্যাট) এ যাওয়ার পরে, 4225 * 16 বিট বিটম্যাপে 67600 বিট, বা বিটম্যাপে 8450 বাইট হবে would 50 টি চিত্রের জন্য 423 কেবি (কোনও সংক্ষেপণ ছাড়াই) প্রয়োজন হবে।

আপনি যদি সত্যিই পুরো রঙের গভীরতা চান তবে আপনার পিক্সেলটিতে 2 বাইটের বেশি প্রয়োজন। সেই পর্যায়ে আপনি প্রতিটি রঙের জন্য ঠিক একইভাবে একটি বাইটও উত্সর্গ করতে পারেন (হোয়াটআরবিস্টের পরামর্শ অনুসারে) যা স্টোরেজের প্রয়োজনীয়তা 3/2 (65x65 বিটম্যাপের জন্য 634 কেবি) বাড়িয়ে তুলবে।

আপনি কোনও বিট নষ্ট না করে মেমোরিতে একে অপরের ঠিক 18-বিট পিক্সেল প্যাক করতে পারেন (বাইট সীমানা সহ উপ-পিক্সেল বিট আন-সাইনড)। আপনার কেবল 50 65x65 18-বিট বিটম্যাপের জন্য 476 কেবি প্রয়োজন হবে তবে এটি প্রোগ্রামে ব্যথা এবং প্রক্রিয়াটি ধীর হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.