נושא: C++ | שאלה בקשר לעיבוד תמונת BMP
|
|
כותב |
|
thunder` משתמש מתחיל
הצטרף / הצטרפה: 01 January 2007
משתמש: מנותק/ת הודעות: 10
|
נשלח בתאריך: 01 January 2007 בשעה 15:35 | | IP רשוּם
|
|
|
|
שלום לכולם! הסתכלתי ברשת על מבנה הBMP כדי לדעת איך אוכל לשלוף מתוך הקובץ את רוחבו, אורכו, תחילת האופסט וכהנה המידע שמצוי בHEADER של BMP. תחילת התמונה בקובץ BMP מתחילה בבייט ה54. לאחר מכן מופיעים מאפייני הפיקסלים ברצף עד סופו של הקובץ (נא להתייחס לקובץ BMP של 24bit) * ביצעתי את קריאת הקובץ וכתיבתו בשיטה בינארית כתבתי תוכנית שתקלוט קובץ BMP ותחזיר את הNEGATIVE שלו... כלומר תכתוב קובץ BMP נוסף שהוא הNEGATIVE של של הקלט ונתקלתי בתופעה מוזרה: עבור קובץ BMP קטן של 9*10 פיקסלים מצויין כל 9 פיקסלים (9*3 בייטים - RGB) מצויים 2 בייטים שמבטאים שורה חדשה, וכך בתוכניתי כל 9 פיקסלים הוספתי 2 בייטים של רווח (00).
המקרה המוזר הוא שבקובץ אחר, תמונה רגילה שלקחתי ולא יצרתי, התוספת לשורה חדשה הייתה בייט אחד בלבד ולא שניים כמו בקובץ BMP שיצרתי לבד בצייר בנוסף לכך, בקובץ תמונה אחר שלקחתי ושמרתי כ24bit כלל לא היה צורך בתוספת של בייטים שמציינים שורה חדשה.
אני מקווה שמישהו יוכל להסביר לי את התופעה הזאת ולהגדיר את התלות של מספר הבייטים שצריך להוסיף בגודל התמונה או בכל קריטריון אחר
תודה!
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 01 January 2007 בשעה 17:19 | | IP רשוּם
|
|
|
|
זה לא קשור לגודל של התמונה, פשוט השורות מסודרות ככה שהאורך שלהן יתחלק במספר מסויים, ומוסיפים "רווחים" כדי שיהיו באורך מתאים.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
thunder` משתמש מתחיל
הצטרף / הצטרפה: 01 January 2007
משתמש: מנותק/ת הודעות: 10
|
נשלח בתאריך: 01 January 2007 בשעה 17:46 | | IP רשוּם
|
|
|
|
אך אורך השורה הוא קבוע לאותה תמונה לא ככה? ואם לא, איך אדע כמה רווחים להוסיף לכל תמונה ותמונה? הרי התוכנית שלי עבדה לתמונה אחת ולא לאחרת, ורק לאחר הוספת/הסרת רווח או שניים בכל שורה התוכנית הוציאה פלט תקין
עריכה: התכוונת אולי שצריך להוסיף רווחים לרוחב של התמונה כדי שיתחלק במספר כלשהו? אם כן, במה הוא צריך להתחלק?
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 01 January 2007 בשעה 18:07 | | IP רשוּם
|
|
|
|
לא, לא, האורך של השורה...
לפי הפורמט מספר הבייטים בכל שורה צריך להתחלק ב-4, והרי כל פיקסל מכיל 3.
אז אם לדוגמא יש לנו תמונה ברוחב 30 פיקסלים, זה אומר שיש לנו בינתיים בשורה 90 בייטים, והמספר צריך להתחלק ב-4, כלומר כמה חסר לנו לכפולה הבאה של 4 ? עוד 2 בייטים, ולכן יהיו לנו עוד שני NULLS בסוף כל שורה.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
thunder` משתמש מתחיל
הצטרף / הצטרפה: 01 January 2007
משתמש: מנותק/ת הודעות: 10
|
נשלח בתאריך: 01 January 2007 בשעה 18:10 | | IP רשוּם
|
|
|
|
תודה רבה! עזרת לי מאוד! עד כמה שאני מתבייש שלא עליתי על החלוקה ב4 לבד...
|
חזרה לתחילת העמוד |
|
|
|
|
אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם
|
אינך יכול/ה לשלוח נושאים חדשים בפורום זה אינך יכול/ה להגיב לנושאים בפורום זה אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה אינך יכול/ה לצור סקרים בפורום זה אינך יכול/ה להצביע בסקרים בפורום זה
|