۰۱-بهمن-۱۳۸۳, ۰۹:۲۶:۳۹
تا به حال در مورد ذخيره سازي فايل هاي گرافيكي فكر كردين راحت ترين فرمت bmp ولي چندان هم راحت نيست
يه سوال آيا مي دونين فايلهاي با 16 بيت براي هر پيكسل چه جوري ذخيره مي شوند؟
براي فايلهاي با مثلا 24 بيت راحت مي شه فهميد خوب سه تا رنگ داريم (قرمز سبز و آبي) براي هر كدام يك بايت كه فرض كنيد مي شه 24 بيت ولي 16 چي بر3 تقسيم پذير نيست؟
فايلهاي bmp از چند ورژن استفاده مي كنند كه تغريبا مثل هم هستند و از دو قسمت تشكيل مي شوند يكي هيدر و دومي ديتا كه قسمت هيدر به اين شرح است
بايت 0”File type” = BM
بايت2 file size
بايت 6 Reseved = 00
بايت 8 Reseved = 00
بايت Bitmap Offset 0A آدرس شروع قسمت ديتا در اينجا نوشته مي شه كه چها بايت طول داره البته اعداد در مبناي 16 و به صورت بر عكس نوشته مي شوند
بايت E Size of header كه معمولا 40 (28 hex) است و طول هيدر رو نشون مي ده البته اين در كاركتر هاي اسكي معادل ")" (قابل توجه آقاي گسترش )
بايت 12 Width طول عكس
بايت 16 Height ارتفاع عكس
بايت Planes 1A كه معمولا برابر 1 است
بايت BitPerPixel 1C تعداد بيتهاي استفاده شده براي يك پيكسل عددي بين 1 – 24
بايت Compression 1E مشخص كننده نوع فشرده سازي كه در صورت صفر بودن فشرده سازي ندارد و نوع فشرده سازي RLE است (كاري نداره ابتدا تعداد تكرار و بعد كاركتر مثلا aaaabbc مي شود 4a2b1c البته اگه تكراري نداشته باشيم حجم زياد تر هم مي شه)
بايت 22 Size Of Bitmap طول * عرض * تعداد بايت بر پيكسل
بايت 26 HorzResolution تعيين كنده پيكسل بر متر براي تغيير نكردن طول عكس در هنگام پرينت
بايت VertResolution 2A تعيين كنده پيكسل بر متر براي تغيير نكردن طول عكس در هنگام پرينت
و ... چند تا چيز به درد نخور ديگه كه توي ورژن هاي مختلف فرق مي كنه ولي توي بايت 36 بايد RedMask قرار داشته باشه و براي رنگهاي ديگه هم بعد از اون وبه اين معني است كه مثلا براي رنگ قرمز چند بيت در نظر گرفته شده و مثلا اول قرمز قرار داره يا آبي اين مشكل ذخيره سازي 16 بيتي رو حل مي كنه مثلا ميشه براي قرمز 5 بيت براي سبز 6 بيت و آبي 5 بيت در نظر گرفت ولي فكر كنم Paint يادش رفته اين رو توي فايلهاش اضافه كنه من كه هرچي گشتم پيدا نكردم
حالا كسي كه حالش رو داشته و اين رو تا اينجا خونده از خودش مي پرسه اين سوال بود يا جواب.
اولا جواب آقاي گسترش بود و سوال من كه بلاخره كسي مي دونه اين اين فرمت 16 بيتي چه جوري ذخيره مي شه؟
آخه در فرمتهاي ديگه پيكسلها به ترتيب پشت سر هم ذخيره مي شوند ولي مثلا رنگ بنفش در همه جا با يك عدد مشخص ميشه و لي تو اين فرمت اين جوري نبود من هرچي عكس رو عوض كردم مثلا براي رنگ قرمز هم از كد 99 استفاده مي كنه هم از كد 00 اين ديگه چه روشيه من نمي دونم شايد يه ورژن ديگه باشه كه ميكروسافت اخيرا از اون استفاده ميكنه خلا صه اگه كسي مي دونه به من هم بگه (اگه كسي اين قدر نوشته بود من كه نمي خوندم ولي دم شما گرم كه تا آخرش رو خوندين يا نكه فقط آخرش رو خوندين؟)
يه سوال آيا مي دونين فايلهاي با 16 بيت براي هر پيكسل چه جوري ذخيره مي شوند؟
براي فايلهاي با مثلا 24 بيت راحت مي شه فهميد خوب سه تا رنگ داريم (قرمز سبز و آبي) براي هر كدام يك بايت كه فرض كنيد مي شه 24 بيت ولي 16 چي بر3 تقسيم پذير نيست؟
فايلهاي bmp از چند ورژن استفاده مي كنند كه تغريبا مثل هم هستند و از دو قسمت تشكيل مي شوند يكي هيدر و دومي ديتا كه قسمت هيدر به اين شرح است
بايت 0”File type” = BM
بايت2 file size
بايت 6 Reseved = 00
بايت 8 Reseved = 00
بايت Bitmap Offset 0A آدرس شروع قسمت ديتا در اينجا نوشته مي شه كه چها بايت طول داره البته اعداد در مبناي 16 و به صورت بر عكس نوشته مي شوند
بايت E Size of header كه معمولا 40 (28 hex) است و طول هيدر رو نشون مي ده البته اين در كاركتر هاي اسكي معادل ")" (قابل توجه آقاي گسترش )
بايت 12 Width طول عكس
بايت 16 Height ارتفاع عكس
بايت Planes 1A كه معمولا برابر 1 است
بايت BitPerPixel 1C تعداد بيتهاي استفاده شده براي يك پيكسل عددي بين 1 – 24
بايت Compression 1E مشخص كننده نوع فشرده سازي كه در صورت صفر بودن فشرده سازي ندارد و نوع فشرده سازي RLE است (كاري نداره ابتدا تعداد تكرار و بعد كاركتر مثلا aaaabbc مي شود 4a2b1c البته اگه تكراري نداشته باشيم حجم زياد تر هم مي شه)
بايت 22 Size Of Bitmap طول * عرض * تعداد بايت بر پيكسل
بايت 26 HorzResolution تعيين كنده پيكسل بر متر براي تغيير نكردن طول عكس در هنگام پرينت
بايت VertResolution 2A تعيين كنده پيكسل بر متر براي تغيير نكردن طول عكس در هنگام پرينت
و ... چند تا چيز به درد نخور ديگه كه توي ورژن هاي مختلف فرق مي كنه ولي توي بايت 36 بايد RedMask قرار داشته باشه و براي رنگهاي ديگه هم بعد از اون وبه اين معني است كه مثلا براي رنگ قرمز چند بيت در نظر گرفته شده و مثلا اول قرمز قرار داره يا آبي اين مشكل ذخيره سازي 16 بيتي رو حل مي كنه مثلا ميشه براي قرمز 5 بيت براي سبز 6 بيت و آبي 5 بيت در نظر گرفت ولي فكر كنم Paint يادش رفته اين رو توي فايلهاش اضافه كنه من كه هرچي گشتم پيدا نكردم
حالا كسي كه حالش رو داشته و اين رو تا اينجا خونده از خودش مي پرسه اين سوال بود يا جواب.
اولا جواب آقاي گسترش بود و سوال من كه بلاخره كسي مي دونه اين اين فرمت 16 بيتي چه جوري ذخيره مي شه؟
آخه در فرمتهاي ديگه پيكسلها به ترتيب پشت سر هم ذخيره مي شوند ولي مثلا رنگ بنفش در همه جا با يك عدد مشخص ميشه و لي تو اين فرمت اين جوري نبود من هرچي عكس رو عوض كردم مثلا براي رنگ قرمز هم از كد 99 استفاده مي كنه هم از كد 00 اين ديگه چه روشيه من نمي دونم شايد يه ورژن ديگه باشه كه ميكروسافت اخيرا از اون استفاده ميكنه خلا صه اگه كسي مي دونه به من هم بگه (اگه كسي اين قدر نوشته بود من كه نمي خوندم ولي دم شما گرم كه تا آخرش رو خوندين يا نكه فقط آخرش رو خوندين؟)