PDA

View Full Version : نحوه ذخیره عکسها به صورت 24 بیت یا 32 بیت



Himalaya
شنبه 20 بهمن 1386, 15:08 عصر
سلام...میخواستم ببینم چه جوری میتونم یه عکس بیت مپ رو در حالت 24 بیت یا 32 بیت
سیو کرد...ممنون.

hassan razavi
شنبه 20 بهمن 1386, 15:39 عصر
Bitmap bm = new Bitmap(100, 200, System.Drawing.Imaging.PixelFormat.Format24bppRgb) ;
Bitmap bm = new Bitmap(100, 200, System.Drawing.Imaging.PixelFormat.Format32bppRgb) ;

Mahdi.Kiani
شنبه 20 بهمن 1386, 15:48 عصر
سلام...میخواستم ببینم چه جوری میتونم یه عکس بیت مپ رو در حالت 24 بیت یا 32 بیت
سیو کرد...ممنون.

اگه درست یادم باشه



Bitmap bmp = new Bitmap("ypur image");
bmp.PixelFormat = System.Drawing.Imaging.PixelFormat.Format24bppRgb;
bmp.PixelFormat = System.Drawing.Imaging.PixelFormat.Format32bppArgb ;
.
.







چون دات نت الان نداشتم.. ولی فکر کنم همین باید باشه
اگر جواب نگرفتین خبر بدین
موفق باشین

Mahdi.Kiani
شنبه 20 بهمن 1386, 15:50 عصر
رضوی جان شرمنده وقتی فرستادم دیدم شما هم فرستادین

Himalaya
شنبه 20 بهمن 1386, 19:32 عصر
ممنون از کمکتون ...مشکلم تو این مورد حل شد...اما بزارید یه کم در مورد کارم توضیح بدم...چون یه مشکل دیگه پیدا کردم...من از صفحه مانیتور عکس 640 در 480 میگیرم...بعد با filestream ویا با تبدیل عکس به یک آرایه اونم از جنس byte عکسو به صورت RGB میخونم...که سرعتش به مراتب بیشتر از getpixel هست...تو file stream من حتما باید عکسو اول سیو کنم رو هارد بعد اونو از روی هارد لود کنم بدم به file stream...اما تو تبدیل عکس به آرایه احتیاج به سیو و لود کردن ندارم(نتیجه اخلاقی اینکه تبدیل عکس به آرایه سرعت زیادتری نسبت به 2 تای قبلی داره)ولی تو file stream و تبدیل عکس به آرایه(یعنی تو دو تاشون)یک مشکل وجود داره...هر دوی اینا عکسو نه به صورت پیکسلی که به صورت bgr (دقیقا به همین ترتیب bgr نه rgb) به من میدن...به محض اینکه از r پیکسل اول رد میشه میره سراغ b پیکسل بعدی)مثلا تو حالت آرایه یا حتی file stream حلقه for من میشه از 0 تا( width*height*3+54)...طول * ارتفاع که میشه تعداد پیکسلای عکس ...*3 هم تعداد کل rgb های عکس...و +54 هم تو تمام عکسا که امتحان کردم ثابت بود...از یکی پرسیدم گفت اون 54 تا هدر عکسه...تا اینجا مشکلی وجود نداره...اما...وقتی من عکس میگیرم از یک فیلم در حال پخش تو desktop (مثلا 10 تا) مثلا 5 تاش میشه هر کدوم 110 کیلو و 3 تاش میشه 101 کیلو و 2تاش میشه 105 کیلو...در حالی که تمام عکسا از هر نظر مثلا بیت بر پیکسل یا رزولوشن یا طول و عرض یکی هستن...شاید بگید که این که مشکل نداره ولی گفتم تو حلقه انتهای حلقه با فرمول بالا مشخص میشه.که نشون دهنده انتهای آرایه یا فایل منه...مثلا برای عکس 640و 480 میشه 921654 تعداد RGB های عکس...ولی وقتی خودم از صفحه عکس میگیرم مثلا این عدد میشه 117456 که کل کارها رو به هم میزنه...در حالی که وقتی از print screen خود کیبورد عکس میگیرم فرمول بالا صادقه...آقای r.kiani یادته گفته بودی انشا بنویسی بهتر از اینه که 4 خط بنویسی بقیه متوجه نشن...اینم انشا ...راستی فایلو نمیتونم براتون بفرستم...چون نزدیک 5 مگا بایته...با این سرعت اینترنت یه 3 یا 4 ساعت طول میکشه...اگه خواستید برنامه رو میریزم رو VHS براتون میفرستم(البته شوخی بود)..ممنون

Himalaya
شنبه 20 بهمن 1386, 22:03 عصر
فهمیدم ...ولی...اینکه ما دستی مثلا موقع سیو پسوندو می نویسیم ، در اصل عکس jpeg هست که ما فقط داریم .jpeg اونو دستی تغییر میدیم...حتی تا وقتی که تو حافظه هستش و ما اونو سیو نکردیم پسوند jpeg داره ...حتی اگه ما اونو از نوع bitmap تعریف کرده باشیم...
تو سیو کردن یک عکس bmp وقتی bmp.save رو میزنیم داخل پرانتز آرگومان دومش imageformat.bmp یا هر چیز دیگه ای وجود داره...اما با این روش اول باید عکسو سیو کنم که من اینو نمیخوام...چطور میتونم در حالی که عکس تو یک متغیر bitmap وجود داره با
ImageFormatConverter یا imageformat پسوند اونو از طریق خود برنامه تغییر بدم نه دستی...البته بدون سیو کردن و در حالی که عکس تو متغیر ما وجود داره...
عکسهای jpeg در حالتی که مثلا صفحه سفید باشه با حالتی که صفحه رنگی باشه سایزشون متفاوته...اما bmp این طوری نیست،یعنی به رنگایی که تو صفحه هستن توجهی نداره و فقط طول و عرض اون مهم هستن...ممنون میشم در این مورد کمکم کنید...

Himalaya
یک شنبه 21 بهمن 1386, 19:05 عصر
کسی نبود جواب بده...