PGM হল পোর্টেবল গ্রে ম্যাপ। আমরা যদি PNG, JPEG, বা অন্য যেকোন ইমেজ ফরম্যাটে ইমেজ হিসাবে C তে একটি 2d অ্যারে সঞ্চয় করতে চাই, তাহলে একটি ফাইলে লেখার আগে কিছু নির্দিষ্ট ফরম্যাটে ডেটা এনকোড করার জন্য আমাদের অনেক কাজ করতে হবে।
Netpbm ফরম্যাট একটি সহজ এবং বহনযোগ্য সমাধান দেয়। Netpbm হল গ্রাফিক্স প্রোগ্রামের একটি ওপেন সোর্স প্যাকেজ এবং এটি মূলত লিনাক্স বা ইউনিক্স প্ল্যাটফর্মে ব্যবহৃত হয়। এটি Microsoft Windows সিস্টেমের অধীনেও কাজ করে৷
প্রতিটি ফাইল একটি দুই-বাইট ম্যাজিক নম্বর দিয়ে শুরু হয়। এই ম্যাজিক নম্বরটি ফাইলের ধরন সনাক্ত করতে ব্যবহৃত হয়। প্রকারগুলি হল PBM, PGM, PPM ইত্যাদি। এটি এনকোডিং (ASCII বা বাইনারি) সনাক্ত করে। ম্যাজিক সংখ্যাটি হল একটি মূলধন P এর পরে একটি একক সংখ্যার সংখ্যা৷
৷ASCII এনকোডিং মানুষের পঠনযোগ্যতা এবং অন্যান্য প্ল্যাটফর্মে সহজে স্থানান্তরের অনুমতি দেয়; বাইনারি ফরম্যাট ফাইলের আকারে বেশি কার্যকর কিন্তু এতে নেটিভ বাইট-অর্ডারের সমস্যা থাকতে পারে।
পিজিএম ফাইল কীভাবে লিখবেন?
- যাদু নম্বর P2 সেট করুন
- হোয়াইটস্পেস যোগ করুন (স্পেস, ট্যাব, সিআর, এলএফ)
- প্রস্থ যোগ করুন, দশমিকে ASCII অক্ষর হিসাবে ফর্ম্যাট করুন
- হোয়াইটস্পেস যোগ করুন
- উচ্চতা যোগ করুন, দশমিকে ASCII অক্ষর হিসাবে ফর্ম্যাট করুন
- হোয়াইটস্পেস যোগ করুন
- সর্বোচ্চ ধূসর মান রাখুন, আবার ASCII দশমিকে
- হোয়াইটস্পেস যোগ করুন
- প্রস্থ x উচ্চতা ধূসর মান, প্রতিটি ASCII দশমিকে (0 এবং সর্বোচ্চ মানের মধ্যে পরিসীমা), উপরে থেকে নীচে হোয়াইটস্পেস দ্বারা পৃথক করা হয়েছে।
উদাহরণ কোড
#include <stdio.h>
main() {
int i, j;
int w = 13, h = 13;
// This 2D array will be converted into an image The size is 13 x 13
int image[13][13] = {
{ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
{ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
{ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47},
{ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
{ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79},
{ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95 },
{ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111},
{ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127},
{ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143},
{ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159},
{ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175},
{ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191},
{ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207}
};
FILE* pgmimg;
pgmimg = fopen("my_pgmimg.pgm", "wb"); //write the file in binary mode
fprintf(pgmimg, "P2\n"); // Writing Magic Number to the File
fprintf(pgmimg, "%d %d\n", w, h); // Writing Width and Height into the
file
fprintf(pgmimg, "255\n"); // Writing the maximum gray value
int count = 0;
for (i = 0; i < h; i++) {
for (j = 0; j < w; j++) {
fprintf(pgmimg, "%d ", image[i][j]); //Copy gray value from
array to file
}
fprintf(pgmimg, "\n");
}
fclose(pgmimg);
} PGM চিত্রটি নীচের মত দেখাচ্ছে
আউটপুট
