سؤال

أحاول كتابة ملف PGM في برنامج C، ولكن بمجرد كتابته، إذا حاولت فتحه لعرض الصورة، يتم إخباري بأنه لا يمكن تحديد تنسيق ملف الصورة.

ومع ذلك، إذا قمت بإنشاء ملف جديد في geany، ونسخ البيانات، ثم حفظ ذلك باعتباره PGM جديدًا، فسيعمل.

أي فكرة لماذا يمكن أن يكون هذا؟

FILE * grey = fopen("greyscale.pgm", "w");

fprintf(grey, "P2 \r\n%d %d \r\n255 \r\n", width, height);

for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
        fprintf(grey, "%d ", ((imageArray[i][j].red + imageArray[i][j].green + imageArray[i][j].blue)/3));
    }
    fprintf(grey, "\r\n");
}

أقوم بتحويل صورة ملونة إلى تدرج رمادي.

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

المحلول

أعتقد أنك لا ينبغي أن تستخدم \r\n كمحدد للخط، ولكن فقط \n.تأكد أيضًا من عدم وجود سطر يزيد طوله عن 70 حرفًا.نظرًا لأن كل بكسل يحتاج إلى إدخال 4 أحرف على الأكثر (3 بالإضافة إلى مسافة). \n بعد كل 17 بكسل.يمكنك فصل الخطوط الحقيقية بالتعليقات (على سبيل المثال:

pixel11 pixel12 pixel13
pixel14 pixel15
# switch to next row
pixel21 pixel22 pixel23
pixel24 pixel25
# etc.

نصائح أخرى

تبحث في التعليمات البرمجية الخاصة بك، وأرى أنك تقوم بإدراج Guardaceticetagcode كل عناصر GransodicetagCode.وفقا لتنسيق ملف PGM، بعد رأس الرأس، يتبع

  • a النقطية من صفوف الارتفاع ، بالترتيب من أعلى إلى أسفل.يتكون كل صف من القيم الرمادية العرضية، بالترتيب من اليسار إلى اليمين.

    ولكن لك كتابة صف من عنصر الارتفاع.لذلك، ربما تصل إلى البيانات بطريقة خاطئة.في الواقع، حاول تصحيح (مع قلم رصاص) صورة 3 أعمدة (عرض) و 4 صفوف (الارتفاع).

    قال ذلك، قم بتغيير الحلقة لكتابة البيانات في الترتيب الرئيسي للصف: giveacodicetagpre.

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