سؤال

حصلت على سؤال لقراءة صورة BMP. كيف يمكنني الحصول على قيمة البيكسل (R ، G ، B قيم) في صورة BMP؟ هل يمكن لأي شخص مساعدتي في استخدام لغة البرمجة C؟

هل كانت مفيدة؟

المحلول

تتمثل الطريقة السهلة في العثور على مكتبة معالجة صور جيدة للمنصة التي اخترتها واستخدامها.

الطريقة الصعبة هي فتح الملف وتفسير البيانات الثنائية في الواقع. للقيام بذلك ستحتاج إلى مواصفات ملف BMP. أوصي بتجربة الطريق السهل أولاً.

نصائح أخرى

ملاحظة: قد تحتاج إلى الحصول على بايت إضافي لقيم ألفا إذا كان BMP الخاص بك يحتوي على قناة ألفا. في هذه الحالة ستكون الصورة image[pixelcount][4], ، وستضيف آخر getc(streamIn) خط لعقد هذا الفهرس الرابع. تحولت BMP الخاصة بي إلى عدم الحاجة إلى ذلك.

 // super-simplified BMP read algorithm to pull out RGB data
 // read image for coloring scheme
 int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
 FILE *streamIn;
 streamIn = fopen("./mybitmap.bmp", "r");
 if (streamIn == (FILE *)0){
   printf("File opening error ocurred. Exiting program.\n");
   exit(0);
 }

 int byte;
 int count = 0;
 for(i=0;i<54;i++) byte = getc(streamIn);  // strip out BMP header

 for(i=0;i<1024;i++){    // foreach pixel
    image[i][2] = getc(streamIn);  // use BMP 24bit with no alpha channel
    image[i][1] = getc(streamIn);  // BMP uses BGR but we want RGB, grab byte-by-byte
    image[i][0] = getc(streamIn);  // reverse-order array indexing fixes RGB issue...
    printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
 }

 fclose(streamIn);

~ locutus

تحتاج إلى دراسة تنسيق ملف BMP. من الأسهل قراءة ملفات BMP غير مضغوطة 24 بت. أنها تحتوي فقط على رأس في البداية وقيم RGB لكل بكسل.

للبدء بهذا ، تحقق من مثال صورة 2x2 صورة نقطية على http://en.wikipedia.org/wiki/bmp_file_format. اتبع الخطوات أدناه.

  1. قم بإنشاء صورة 2x2 BMP الموضحة على ويكيبيديا.
  2. افتح الملف في الوضع الثنائي باستخدام برنامج C الخاص بك.
  3. تسعى إلى الموقف البايت 54.
  4. اقرأ 3 بايت.

ستكون البايتات 0 و 0 و 255 على التوالي. (لست متأكدًا مما إذا كان الطلب هو RGB. لقد فعلت هذا منذ فترة طويلة وأعتقد أن الأمر ليس RGB. فقط تحقق من هذا.)

بهذه البساطة! ادرس رأس BMP لفهم المزيد حول التنسيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top