View Full Version : باز کردن یه فایل BMP در TC تحت داس
SAEED_ALIZADEH
چهارشنبه 28 آذر 1386, 19:26 عصر
سلام دوستان عزیز
خسته نباشید
لطفا طرز باز کردن یه فایل BMP و نشون دادن اون تو خروجی رو تو TC البته تحت داس برام بنویسید
ممنون میشم اگه کمکم کنید :لبخندساده:
SMRAH1
پنج شنبه 29 آذر 1386, 10:48 صبح
یه سری به آدرس
http://www.brackeen.com/home/vga/ (http://www.brackeen.com/home/vga/)
بزن برنامه های جالبی برای کار با موس و گرافیک تحت Turno C و DJGPP داره.توجه کن که از هر برنامه دو تا دوست برای هر دوکامپایلر داره.
SAEED_ALIZADEH
جمعه 30 آذر 1386, 07:28 صبح
ممنون از راهنماییت متشکرم
mt.zare
جمعه 11 بهمن 1387, 15:07 عصر
آقا عالی بود . مرسسسسسسسسسسسسی
star462
یک شنبه 16 فروردین 1388, 18:00 عصر
من لینکی که شما در این سایت معرفی کرده بودین را مطالعه کردم ولی چیز زیادی سر در نیاوردم
میخواستم بدونم با چه دستوری میتونم یک فایل به پسوند Bmp را داخل کامپایلر tcc باز کنم؟
khaksar.maryam
شنبه 12 دی 1388, 10:42 صبح
سلام دوستان عزیز
خسته نباشید
لطفا طرز باز کردن یه فایل BMP و نشون دادن اون تو خروجی رو تو TC البته تحت داس برام بنویسید
ممنون میشم اگه کمکم کنید :لبخندساده:
سورس برنامه گفته شده رو می خوام.
با تشکر فراوان
mortezamsp
شنبه 12 دی 1388, 20:34 عصر
این برنامه داخلش یه تابع برای بازکردن bmp تحت داس هست :
baran_mehr
چهارشنبه 18 فروردین 1389, 15:16 عصر
دوست عزیز ممنون از این فایلی که گذاشتی.
من متاسفانه نتونستم قسمتی که bmp رو باز میکنه رو پیدا کنم میشه یه کمکی کنید.
ممنون میشم
amin1softco
چهارشنبه 18 فروردین 1389, 18:30 عصر
والا گوگل چیز خوبیه ....
اول اینو ببین http://en.wikipedia.org/wiki/BMP_file_format (http://en.wikipedia.org/wiki/BMP_file_format)
http://www.ue.eti.pg.gda.pl/fpgalab/zadania.spartan3/zad_vga_tab_struktura.gif
Fig. 2 Structure of BMP file
پس از جدول بالا می فهمیم که در 14 بایت اول فایل اطلاعات هدر (سر فایل) قرار داره که آخریش به کار می آد (آفست) که در واقع برای ما مشخص می کنه که اطلاعات خام بیتی از کجای فایل شروع می شود در 40 بایت بعدی اطلاعات برچسب ها که برای ما مهم هستند قرار داره
اولی سایز این بر چسب ها رو مشخص می کنه یعنی همین 40 بایت که داریم می خونیم ممکنه بیشتر هم باشه که از اینجا می فهمیم چقدره
بعدش عرض این عکسی که می خواهیم به نمایش بزاریم مشخص می شود و سپس طول و بعد از طول سطح ها یا بعد ها که باید روی 1 تنظیم باشه چون ما می خواهیم عکس مسطح نمایش بدیم و بعدش بیت کانت هست که خلی خیلی برای نمایش عکس مهم هست و عمق رنگ ها رو به ما نشون میده که می تونه مقادیر 1و4و8و16و24و32 رو داشته باشه و اگه 2 را به توان این اعداد برسونید تعداد رنگ های مختلفی که یک پیکسل می تونه نمایش بده مشخص میشه و این قسمت به ما میگه که اولا چقدر حافظه لازمه بعد در هر ÷یکسل باید چند بیت قرار بگیره مثلا اگر تصویر ما 8 بیتی باشه می شه با 1 بایت هر پیکسل رو مشخص کد و اگر ضرب در طول و عرض تصویر بشود حافظه لازم برای نمایش این عکس مشخص می شود
و برچسب بعدی هم خیلی مهم است که نوع فشرده سازی به کار رفته در این عکس را برای ما مشخص می کنه:
0 برای حالت ساده است بدون فشرده سازی و 1 برای حال 8 بیت بر پیکسل با نوع RLE فشرده سازی 2 برای 16 بیت بر پیکسل با نوع RLE فشرده سازی 3 برای 24 و 32 بیت بر پیکسل با نوع فشرده سازی Bit field (http://groups.google.com/wiki/Bit_field) و 4 فشرده سازی از نوع jpeg و 5 برای فشرده سازی png
که البته اگر غیر یک بود ما بیخیال نمایشش می شویم
مقدار بعدی هم مربوط به سایز قبل از فشردگی فایل است که اگر فشرده نباشه باید روی 0 قرار بگیره
و قسمت بعدی مربوط می شه به وضوح تصویر یعنی چند تا پیکسل رو در1 متر در عرض (افقی) نمایش باید داد که هرچقدر بزرگتر باشه کیفیت عکس بیشتره و قسمت بعدی همین در طول (عمودی) هست.
قسمت بعدی مربوط به تعداد رنگها برای هر پیکسل است که به طور پیشفرض 0 که با همون 2 به توان بیت ها حساب میشه
قسمت بعدی هم مربوط به رنگ های مهم تره که بطور پیشفرض 0 قرار داده میشه وکلا این را در نظر نمی گیریم.
خوب قسمت بعدی هم ماله مقدار های کمتر از 8 بیت بر پیکسل هست که چون بیشتر فایل ها الان 24 و23 بیت بر پیکسل هستند پس این قسمت رو هم در نظر نمی گیریم.
ادامه دارد ........
http://en.wikipedia.org/wiki/BMP_file_format (http://en.wikipedia.org/wiki/BMP_file_format)
http://www.kalytta.com/bitmap.h (http://www.kalytta.com/bitmap.h)
http://www.brackeen.com/vga (http://www.brackeen.com/vga)
حتما به ویکی پدیا سر بزنید خیلی قشنگ تر توضیح داده البته این کار یک کار سطح پایین هست برای درک مراحل کار
نکته فایل های بیتمپ یکی از ساده ترین نوع فایل های گرافیکی هستند پس فکر نکنید اینها خیلی بدرد بخور هستند در ضمن یک نکته که وجود داره اینه که ترتیب پیکسل ها از گوشه پایین سمت چپ شروع میشه یعنی اگر فایل را از اولش بخونیم وبنویسیم یک عکس وارونه مشاهده می شود ..............
رفع ابهام :
روش نمایش این عکس شبیه به نمایش یک آرایه دوبعدی است کار خاصی انجام نمی دهیم دو تا حلقه که یکی به اندازه طول ودیگری به اندازه پهنای تصویر باشه کافیه و یک تابع که رنگ هر پیکسل را مشخص کنه برای رنگ وقتی ما اطلاعات خام بیتی را می خونیم که بر اساس هگزدسیمال هست می تونیم دو تا کار انجام دهیم اول اینکه اونها رو تبدیل به دسیما کنیم وبا تابع putpixel سر فایل گرافیک پیکسل را رسم کنیم یا اینکه در 1 بایت یک بایت بخونیم و با تابع vga پیکسل را رسم کنیم اینطوری:
for(y=0;y<64;y++)
for(x=0;x<32;x++)
VGA [x+y*320]=bitmap [x+y*32];
در ضمن توضیحات بالا رو باید با جدول مرور کنید....
قسمت دوم:
خوب در ادامه طراحی یک برانامه برای نمایش عکس های نوع بیتمپ فهمیدیم که این عکس ها چندین نوع هستند که 1 و4و8و14و24و32 بیت بر پیکسل انواع آن هستند که اگر بخواهیم یک کد جامع برای نمایش بیت مپ بنویسیم باید همه این نوع ها که خودشون رو در سر فایل معرفی می کنند را تفکیک کنیم و فرمت های فشرده را هم در نظر بگیریم . که در بالا یک سورس کامل لینک شد ولی
یک مطلب دیگه که وجود داره این هست که در نوع های 1 و4 و8 بیتی بعد از هدر اینفو تازه باید پالت های رنگ رو ترجمه کنیم که خودش یک کار وقت گیر هست که گفتیم در نوع 24 و 32 بیت این قسمت کامل حذف شده است و احتیاجی به ترجمه رنگ پالت ها نیست . حالا ما می خواهیم تحت توربو سی یک برنامه خیلی خیلی ساده برای نمایش نوع 8 بیتی بنویسیم دلیل انتخاب این نوع, محدودیت رنگ در داس ,16 رنگ مجزا و اینکه چون هر کارکتر 8 بیت هست یعنی یک بایت می تونه هر پیکسل را ذخیره کنه .
گفتیم که برای این کار میشه از دوتا حلقه ساده استفاده کرد و مثل نمایش یک ماتریس پیکسل ها را در کنار هم گذاشت تا شکل ما مشخص شود و گفتیم که باید اولین پیکسل که در فایل خوانده می شود اولین پیکسل گوشه پایین سمت چپ عکس را تشکیل می دهد اما اصل مطلب:
اول باید سر فایل ها رو بخونیم که قبلا راجع به اون توضیح دادم که سه تا کلاس تعریف می کنیم اولی برای تشخیص هویت فایل
دومی اطلاعات اصلی
سومی اطلاعات عمومی فایل بیت مپ
خوب تمام این کلاس ها در سایت ویکی پدیا وجود داره که می تونید ازشون استفاده کنید چیز هایی که ما لازم داریم طول و عرض عکس و (آفست) آدرس جایی که اطلاعات پیکسل ها ذخیره شده است و نوع بیتمپ که اگر غیر از 8 بود یک اخطار بدیم که فایل رو نمی تونیم تر جمه کنیم خوب بیشتر قسمت ها در کد توضیح داده شده:
#include <iostream.h>
#include <graphics.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct U{
unsigned char magic[2];
}mag;
struct master {
// word bftype;
unsigned long Size;
unsigned short Reserved;
unsigned short Reserved2;
unsigned long BitsOffset;
} HEADER;
class info {public:
unsigned long header_sz;
unsigned long width;
unsigned long height;
unsigned short nplanes;
unsigned short bitspp;
unsigned long compress_type;
unsigned long bmp_bytesz;
unsigned long hres;
unsigned long vres;
unsigned long ncolors;
// unsigned long nimpcolors;
} INFOHEADER;
huge DetectSvga()
{
return 2;
}
void Show(char* filename,int xcor,int ycor)
{
fstream File;
File.open(filename,ios::in);
char Ch;
File.read((char*)&mag,2);// read te 2 frist byte for know file
/*if (mag.magic!="BM"){
printf("file not a bitmap");
exit(0);
}*/
File.read((char*)&HEADER,12); //read for get offst bye of bitmap data
File.read((char*)&INFOHEADER,40); //read for width , heght and know 8 bit
unsigned int i;
File.seekg(HEADER.BitsOffset);
for(i=0;i<INFOHEADER.height;i++) //This for loop is used to display the bitmap.
{
for(int j=0;j<INFOHEADER.width;j++)
{
File.read(&Ch,1); // Here Ch reads the color of your bitmap.
putpixel(xcor+j,ycor+INFOHEADER.height-i,Ch);//write pixel to screen
}
}
File.close();
}
void main()
{
clrscr();
int gd = DETECT, md, a;
initgraph(&gd,&md,"..\\bgi");
installuserdriver("svga256",&DetectSvga);
char msg[15];
char* k;
cout<<"plz write adress of 8-bit bitmap format file: (example: c:/test.bmp)"<<endl;
cin>>k;
Show(k,100,100);
getch();
}
saber187518
جمعه 17 دی 1389, 07:15 صبح
سلام دوست عزیز
من برنامه شما رو تست کردم. و با یک سری رفع خطا ها برنامه اجرا شد. ولی وقتی که من آدرس یک فایل تصویری bmp رو بهش دادم که 256 رنگ بود (8 بیت) متاسفانه نمایش داده نشد و فقط سک مستطیل سفید رنگ رو به من نشون داد.
من از turbo c++ 3 استفاده کردم.
میشه لطف کنی و بگی چرا این مشکل به وجود اومده ؟ و چطور میشه این مشکل رو برطرف کرد.
یا علی...
amin1softco
پنج شنبه 13 بهمن 1390, 21:49 عصر
راستش این برنامه برای من که درست کار می کرد اون روز الان دنبال این تاپیک بودم برای توضیح برای یک نفر دیگه که پست شما رو دیدم ولی برای آیندگان یک نمونه قرار میدم. که با این برنامه عکس لود می کنه...و داخله پوشه ani پلت فوتوشاپ برای ساخت اینجور بیتمپ ها رو قرار دادم.موفق باشید.
برای openGL هم به این لینک مراجعه کنید http://barnamenevis.org/showthread.php?325656-%D8%B9%DA%A9%D8%B3-%D8%AF%D8%B1-opengl
soorena
جمعه 14 بهمن 1390, 16:02 عصر
سلام این برنامه هم که من گذاشتم عکسهای bmp رو داخل یک ارایه لود میکنه که البته میتونی روی پیکسلها هر کاری که خواستی بکنی و عکس رو ذخیره کنی. مثلا من ۲ تا تابع نمونه برای تبدیل dct و rgb2gray نوشتم توش.
اینا رو تو اوبونتو کامپایل کردم و کار میکنه. امیدوارم به درد بخور.(این قسمتی از یه پروژه اپن سورس بود که قرار بود تمام پسوندهای فایلها رو باز کنه که البته فقط bmp و jpg رو پیاده سازی کردم و دیگه هیچ وقت فرصت نکردم ادامه بدم.)
http://maroofi.persiangig.com/sImg/driver.cpp
http://maroofi.persiangig.com/sImg/sImg.cpp
http://maroofi.persiangig.com/sImg/sImg.h
amin1softco
جمعه 14 بهمن 1390, 19:48 عصر
منم اون روزی که این ها رو درست کردم ذخیره رو خونده بودم می خواستم ببینم چی به چیه وگرنه اینهمه کتابخانه مثل devil - gd برای اینکار هست و اکثر فرمت ها رو پشتیبانی می کنه آدم که مجبور نیست خودش رو به زحمت بندازه :چشمک:
ولی کار جابی بود ....
sha8046
چهارشنبه 24 اسفند 1390, 13:43 عصر
من خیلی دنبال این مقوله بودم و از آموزش های دوستان هم خیلی استفاده کردیم . من اینو با کمی دستکاری کردن بدست آوردم امیدوارم بدردتون بخوره :
این فایل رو دانلود کنید .
http://uplod.ir/okwn44r900o9/24bmp_bgi32.zip.htm (http://uplod.ir/okwn44r900o9/24bmp_bgi32.zip.htm)
این با فرمت bmp 24 bit - زبان سی و کتابخانه گرافیکی winbgi 32 bit برای محیط 32 بیتی :
در یک محیط مثل ویژوال استودیو
اول کتابخانه graphics2.h رو در شاخه include کپی کنید .
فایل های openbmp , test.bmp در یک شاخه کپی کنید .
یه پروژه باز کنید فایل openbmp رو باز کنید و فایل winbgi رو به پروژه اضافه کنید .
برنامه را اجرا کنید .
milad465
چهارشنبه 15 آذر 1391, 22:21 عصر
سلام
ببخشید یه سوال داشتم.و با کدام کامپایلر سی پلاس کار کنم که کتاب خونه graphics2.h رو داشته باشهو یا این کتابخونه بتونه باهاش کار کنه؟
با تشکر
hamed828
شنبه 29 خرداد 1395, 18:17 عصر
سلام
من یک برنامه دارم که کار گرافیکی داره داخلش ولی موقع ران کردن برنامه برنامه include<graphics.h رو نمیشناسه
لطفا راهنمایی کنین
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.