bmp нені білдіреді? BMP файл кеңейтімі дегеніміз не? bmp кеңейтімін ашу үшін қандай бағдарлама

BMP(ағылшын тілінен Растрлық сурет) — Microsoft әзірлеген растрлық кескінді сақтау пішімі.

Бағдарламалардың үлкен саны BMP пішімімен жұмыс істейді, өйткені оның қолдауы Windows және OS/2 операциялық жүйелеріне біріктірілген. BMP файлдарының .bmp, .dib және .rle кеңейтімдері болуы мүмкін. Сонымен қатар, осы пішімдегі деректер екілік RES ресурстық файлдарына және PE файлдарына қосылады.

Microsoft сонымен қатар өзінің қажеттіліктері үшін BMP-ге ұқсас құрылымы бар ICO және CUR пішімдерін әзірледі. Сонымен қатар, бұл пішімдегі құрылымдар GDI ішкі жүйесінің кейбір WinAPI функцияларымен пайдаланылады.

Бұл пішімдегі түс тереңдігі бір пиксель үшін 1, 2, 4, 8, 16, 24, 32, 48 бит болуы мүмкін, бірақ бір пиксельге 2 бит ресми түрде қолдау көрсетпейді. Бұл жағдайда 16 биттен аз түс тереңдігі үшін тереңдігі 24 бит толық түсті құрамдастары бар палитра қолданылады.

BMP пішімінде кескіндерді сол қалпында немесе кейбір жалпы қысу алгоритмдерін пайдалану арқылы сақтауға болады. Атап айтқанда, BMP пішімі RLE сығымдауды сапаны жоғалтпай қолдайды, ал заманауи операциялық жүйелер мен бағдарламалық қамтамасыз ету JPEG және PNG форматтарын пайдалануға мүмкіндік береді (бұл пішімдер BMP ішіне контейнер ретінде салынған).

DIB және DDB

DIB пішімін пайдаланған кезде Құрылғының тәуелсіз растрлық кескіні, құрылғыдан тәуелсіз растр), бағдарламашы кәдімгі көрсеткіштің көмегімен кескінді сипаттайтын құрылымдардың барлық элементтеріне қол жеткізе алады. Бірақ бұл деректер экранды тікелей басқару үшін пайдаланылмайды, өйткені ол әрқашан арнайы бейне жадында емес, жүйелік жадта сақталады. ЖЖҚ-дағы пиксель пішімі бір түсті нүктені көрсету үшін бейне жадында сақталуы керек пішімнен өзгеше болуы мүмкін. Мысалы, DIB пішімі пикселді көрсету үшін 24 битті пайдалана алады және қазіргі уақытта графикалық адаптер 16 бит түс тереңдігімен HiColor режимінде жұмыс істей алады. Бұл жағдайда ашық қызыл нүкте аппараттық құралға тәуелсіз форматта үш байт 0x0000ff, ал бейне жадта 0xF800 сөзі арқылы көрсетіледі. Суретті экранға көшіру кезінде жүйе түс кодтарын 24 биттік пішімнен бейне буфер пішіміне түрлендіруге қосымша уақыт жұмсайды.

Файл құрылымына шолу

BMP файлы төрт бөліктен тұрады:

  1. Файл тақырыбы (BITMAPFILEHEADER)
  2. Кескін тақырыбы (BITMAPINFOHEADER, жоқ болуы мүмкін). BITMAV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
  3. Палитра (жоқ болуы мүмкін)
  4. Суреттің өзі

BITMFILEHEADER

Бұл құрылым файлдағы деректердің түрі, өлшемі және көрінісі туралы ақпаратты қамтиды. Көлемі 14 байт.

Typedef struct tagBITMAPFILEHEADER ( WORD bfType; // файлдың басынан 0 байтты ығыстыру DWORD bfSize; // файлдың басынан 2 байт ығысу, ұзындығы 4 байт WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;

// файлдың басынан 10 байт ығысу, ұзындығы 4 байт

  • ) BITMAPFILEHEADER, * PBITMAPFILEHEADER;
  • WORD түрі 16 бит болуы керек, DWORD және LONG түрлері 32 бит болуы керек, LONG түрі қолтаңбасы болуы керек және байт реті аз ендіан деп қабылданады.
  • bfType – файл түрі, символдар «BM» (HEX: 0x42 0x4d).
  • bfSize – бүкіл файлдың байттағы өлшемі.

bfReserved1 және bfReserved2 сақталған және нөлдерден тұруы керек.

bfOffBits - BITMAPFILEHEADER құрылымының басынан кескін биттерінің өздеріне дейінгі байттармен ығысуды қамтиды.

Файл тақырыбынан кейін

BITMAPINFOHEADER

Ең қарапайым тақырып опциясы. Windows NT3.51 және одан бұрынғы нұсқасына арналған қолданбалар тек осы құрылымды пайдалана алады. Көлемі 40 байт.

  • 0 - Win98/Me/2000/XP үшін мағынасы бар. Бір пиксельдегі бит саны JPEG немесе PNG пішімін анықтайды.
  • 1 - монохромды кескін. BITMAPINFO құрылымының bmiColors мүшесі екі элементті қамтиды. Кескіннің әрбір биті бір пикселді білдіреді; егер бит нөлге тең болса, пикселде bmiColors кестесінің бірінші элементінің түсі болады, әйтпесе - екіншісінің түсі.
  • 4 - он алты түсті сурет. Пиксельдер 4-биттік индекстермен анықталады, кескіннің әрбір байты екі пиксел туралы ақпаратты қамтиды - біріншісі үшін ең маңызды 4 бит, екіншісі үшін қалғандары.
  • 8 - палитрада 256 түске дейін болады, кескіннің әрбір байты бір пиксель үшін палитрада индексті сақтайды.
  • 16 - егер biCompression өрісінде BI_RGB мәні болса, файлда палитра жоқ. Кескіннің әрбір екі байты бір пикселдің қызыл, жасыл және көк құрамдастарының қарқындылығын сақтайды. Бұл жағдайда ең маңызды бит пайдаланылмайды, әрбір компонент үшін 5 бит бөлінеді: 0RRRRGGGGGBBBBB.
    Егер biCompression өрісінде BI_BITFIELDS мәні болса, бояғышта үш түсті құрамдастардың әрқайсысы үшін масканы анықтайтын үш төрт байттық мән сақталады. Кескіндегі әрбір пиксель маскалар арқылы түс құрамдастары шығарылатын екі байттық мәнмен көрсетіледі. WinNT/2000/XP үшін әрбір құрамдастың разряд тізбегі басқа компоненттердің тізбегімен қабаттаспай немесе қиылыспастан үздіксіз орындалу керек. Win95/98/Me үшін – тек келесі маскаларға қолдау көрсетіледі: 5-5-5, мұнда көк компоненттің маскасы 0x001F, жасыл 0x03E0, қызыл 0x7C00; және 5-6-5, мұнда көк компоненттің маскасы 0x001F, жасыл 0x07E0, қызыл 0xF800.
  • 24 - палитра пайдаланылмайды, суреттің әрбір үш байты сәйкесінше көк, жасыл және қызыл арналардың қарқындылығы үшін бір пикселді, бір байтты білдіреді.
  • 32 - BiCompression өрісінде BI_RGB мәні болса, кескінде палитра болмайды. Кескіннің әрбір төрт байты сәйкесінше көк, жасыл және қызыл арналардың қарқындылығы үшін бір пикселді, әрқайсысы бір байтты білдіреді. Әрбір квадтың ең маңызды байты әдетте пайдаланылмайды, бірақ альфа-арна деректерін сақтауға мүмкіндік береді.
    Егер biCompression өрісінде BI_BITFIELDS мәні болса, палитрада қызыл, жасыл және көк құрамдастарға арналған үш төрт байт түсті маска сақталады. Суреттегі әрбір пиксел төрт байтпен көрсетіледі. WinNT/2000: құрамдас бетперделер қабаттаспауы немесе қиылыспауы керек. Windows 95/98/Me: жүйе BI_RGB қысусыз режимге толығымен ұқсас бір ғана қысу режимін қолдайды - әрбір төрт байт альфа арнасы ретінде пайдаланылады, келесі үшеуі көк, жасыл және қызыл үшін сақталған. арналар, сәйкесінше: 0xAARRGGBB.
biCompression Қысылған кескіндер үшін қысу түрі:
Мағынасы Идентификатор Қысу
0 BI_RGB қысылмаған кескін
1 BI_RLE8 8-биттік кескіндер үшін RLE қысу
2 BI_RLE4 4 биттік кескіндер үшін RLE қысу
3 BI_BITFIELDS кескін қысылмаған, палитрада қызыл, жасыл және көк түсті құрамдастарға арналған үш 4 байттық маска бар. 16 және 32 биттік кескіндер үшін пайдаланылады
4 BI_JPEG Win98/Me/2000/XP: JPEG қысу
5 BI_PNG Win98/Me/2000/XP: PNG қысу
6 BI_ALPHABITFIELDS WinCE: кескін қысылмаған, палитрада қызыл, жасыл, көк және мөлдір (альфа арнасы) түсті құрамдастарға арналған төрт 4 байт маскасы бар. 16 және 32 биттік кескіндер үшін пайдаланылады
biSizeImage Бейттегі кескін өлшемі. BI_RGB кескіндері үшін нөл болуы мүмкін. Win98/Me/2000/XP: biCompression құрамында BI_JPEG немесе BI_PNG болса, biSizeImage BI_JPEG немесе BI_PNG кескін буферінің өлшемін көрсетеді.
biXPelsPerMeter Мақсатты құрылғы үшін метрге пиксельдегі көлденең ажыратымдылық. Қолданба осы мәнді кескін ресурстарының тобынан ағымдағы құрылғыға ең сәйкес келетін кескінді таңдау үшін пайдалана алады. Microsoft корпорациясы мониторлар үшін қабылдаған DPI 96 үшін ол 3780-ге тең болады (егер (96 / 25.4) * 1000 формуласы арқылы есептелсе).
Бумаланған кескінде пиксель массиві бірден BITMAPINFO құрылымына сәйкес келеді, biClrUsed нөлді немесе нақты палитра өлшемін қамтуы керек.

biClrImportant Суретті көрсету үшін қажетті палитра элементтерінің саны. Оның құрамында нөл болса, барлық индекстер бірдей маңызды.

BITMAPINFO құрылымы BITMAPINFOHEADER және палитраны біріктіріп, кескіннің өлшемдері мен түстерінің толық сипаттамасын береді.

BITMAPINFO құрылымында палитраны табу үшін қолданба biSize ішінде сақталған ақпаратты төмендегідей пайдалануы керек:

PColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo-> bmiHeader.biSize ) );

Растр әдетте тігінен шағылыстырылған түрде сақталады. Бірақ растрды тік айналылмаған пішінде сақтауға да болады. BMP ішіндегі растрдың тік айна пішімінде еместігінің белгісі biHeight параметрі арқылы көрсетіледі.

BITMAV4HEADER

Жоғарыда сипатталған құрылымның кеңейтілген нұсқасы. Win NT 3.51 және бұрынғы нұсқалары BITMAPINFOHEADER құрылымын пайдалануы керек. Win98/Me/2000/XP BITMAPV4HEADER құрылымының орнына BITMAV5HEADER құрылымын пайдалана алады.

Typedef struct ( DWORD bV4Size; LONG bV4Width; LONG bV4Height; WORD bV4Planes; WORD bV4BitCount; DWORD bV4V4Compression; DWORD bV4SizeImage; LONG bV4XPelsPerMeter; LONG DWordPerMeter; LONG DWORDCVter; 4ClrMask DWORD bV4GreenMask ;

  • Құрылымның басынан бастап bV4ClrImportant қосатын өрістер BITMAPINFOHEADER құрылымының сәйкес өрістерімен бірдей мақсатқа ие.
  • bV4RedMask - әрбір пикселдің қызыл құрамдас бөлігінің түс маскасы, егер bV4Compression құрамында BI_BITFIELDS мәні болса ғана пайдаланылады.
  • bV4GreenMask - әрбір пикселдің жасыл құрамдас бөлігінің түс маскасы, егер bV4Compression құрамында BI_BITFIELDS мәні болса ғана пайдаланылады.
  • bV4BlueMask - әрбір пикселдің көк құрамдас бөлігінің түс маскасы, егер bV4Compression құрамында BI_BITFIELDS мәні болса ғана пайдаланылады.
  • bV4AlphaMask – альфа-арна компонентін анықтайтын маска.
  • bV4CSType - кескіннің түс кеңістігін анықтайды.
  • bV4GammaRed – қызыл компоненттің тон қисығы. bV4CSType құрамында LCS_CALIBRATED_RGB мәні болмаса, еленбейді. 16×16 форматында көрсетілген.
  • bV4GammaGreen – жасыл компоненттің тон қисығы. bV4CSType құрамында LCS_CALIBRATED_RGB мәні болмаса, еленбейді.
  • bV4GammaBlue - көк компонент тонының қисығы. bV4CSType құрамында LCS_CALIBRATED_RGB мәні болмаса, еленбейді.

BITMAV5HEADER

Win95/NT 4.0: қолданбалар BITMAV4HEADER пайдалана алады. Win NT 3.51 және бұрынғы нұсқалары BITMAPINFOHEADER құрылымын пайдалануы керек.

Typedef құрылымы ( DWORD bV5Size; LONG bV5Width; LONG bV5Height; WORD bV5Planes; WORD bV5BitCount; DWORD bV5Compression; DWORD bV5SizeImage; LONG bV5XPelsPerMeter; LONG bV5XPelsPerMeter; LONG bV5XPelsPerMeter; bV5Yr DWORD bV5GreenMask CIEXYZTRIPLE bV5DWORD bV5ProfileSize; 5HEADER;

Құрылымның басынан бастап bV5GammaBlue қоса алғанда өрістер үшін тек алдыңғы нұсқалардан - BITMAPINFOHEADER және BITMAPV4HEADER айырмашылығы сипатталады.

  • bV5CSType - кескіннің түс кеңістігін анықтайды, келесі мәндерді қабылдай алады:
LCS_CALIBRATED_RGB LCS_sRGB LCS_WINDOWS_COLOR_SPACE PROFILE_LINKED PROFILE_ENBEDDED
  • bV5Intent - келесі мәндерді қабылдай алады:
LCS_GM_ABS_COLORIMETRIC LCS_GM_BUSINESS LCS_GM_GRAPHICS LCS_GM_IMAGES
  • bV5ProfileData - құрылымның басынан профиль деректерінің басына дейін байтпен ығысу (профильдік файл атауы, тек 1252 таңба код кестесінен тұратын және нөл байтпен аяқталатын жол). bV5CSType құрамында PROFILE_LINKED және PROFILE_EMBEDDED мәндерден басқа мән болса, еленбейді.
  • bV5ProfileSize - байттағы профиль деректерінің өлшемі.
  • bV5 Резервтелген - резервтелген. Құрамында нөл бар.

Палитра

Бояғышта қолжетімді түстер санына сәйкес төрт байт өрістер тізбегі болуы мүмкін (8 биттік кескін үшін 256). Әрбір өрістің төменгі үш байты түстің қызыл, жасыл және көк құрамдастарының қарқындылығын анықтайды, жоғары байт пайдаланылмайды; Бұл жағдайда кескіннің әрбір пикселі осы пикселдің түсі сақталатын палитра өрісінің нөмірін қамтитын бір байтпен сипатталады.

Егер кескін пикселі 16 биттік санмен сипатталса, палитра үш екі байтты мәнді сақтай алады, олардың әрқайсысы 16 биттік пикселден қызыл, жасыл және көк түсті құрамдастарды шығару үшін бүркенішті анықтайды.

BMP файлында сығымдалмаған толық түсті кескін сақталса, онда палитра болмауы мүмкін.

Кескін деректері

Бір немесе басқа пішінде жазылған пикселдер тізбегі. Пиксельдер жол бойынша, төменнен жоғарыға дейін сақталады. Әрбір кескін жолы төрт байтқа еселік ұзындыққа нөлдермен толтырылады.

Түс тереңдігі 24 бит болатын bmp файлдарында әрбір пикселдің түс байты BGR (Көк, Жасыл, Қызыл) ретімен сақталады.

Түс тереңдігі 32 бит болатын bmp файлдарында әр пикселдің түс байты BGRA ретімен сақталады (Көк, Жасыл, Қызыл, Альфа)

Кескіннің бит тереңдігі

Ұсынылған түстердің санына байланысты әрбір нүкте 1-ден 48 битке дейін бөлінеді:

  • 1 бит – монохромды кескін (екі түсті).
  • 2 бит - 4 мүмкін түстер (CGA жұмыс режимдері) (2-биттік режим ресми стандартталмаған, бірақ пайдаланылады).
  • 4 бит - 16 түсті кескін (EGA жұмыс режимдері).
  • 8 бит (1 байт) - 256 түс, индекстелген түстерді қолдауға арналған режимдердің соңғысы (төменде қараңыз).
  • 16 бит (2 байт) - HiColor режимі, 5-6-5 үшін = 65536 ықтимал реңктер, 5-5-5 үшін = 32768 мүмкін реңктер.
  • 24 бит (3 байт) - TrueColor. 3 байт екі қуатпен жақсы сәйкес келмейтіндіктен (әсіресе деректерді жадта сақтау кезінде, сөз шекарасындағы деректерді туралау маңызды болған кезде), оның орнына 32 биттік кескін жиі пайдаланылады. TrueColor режимінде үш арнаның әрқайсысына (RGB режимінде) 1 байт (256 мүмкін мән) бөлінген, түстердің жалпы саны .
  • 32 бит (4 байт) - бұл режим дерлік TrueColor-ға ұқсас, төртінші байт әдетте пайдаланылмайды немесе альфа арнасы (мөлдірлік) онда орналасқан.
  • 48 бит (6 байт) – бағдарламалар мен жабдықтың салыстырмалы түрде аз санымен қолдау көрсетілетін түс дәлдігі жоғары (әр арнаға 16 бит) сирек қолданылатын пішім.

Индекстелген түстер

Биттер саны бір пиксельге 1 (2 түс), 2 (4 түс), 4 (16 түс) немесе 8 (256 түс) болғанда, арнайы индекстелген түс режимін пайдалануға болады. Бұл жағдайда әрбір пиксельге сәйкес келетін сан түсті емес, палитрадағы түстің санын көрсетеді. Палитраны пайдалану арқылы кескінді кескінде бар түстерге бейімдеуге болады. Бұл жағдайда кескін көрсетілген түстермен емес, бір уақытта қолданылатын түстердің максималды санымен шектеледі.

Мысал бағдарлама

Келесі бағдарлама XWindow ішінде 24 биттік BMP файлын ашады, түс тереңдігі 32 бит болуы керек, ол төменгі түсті көрсетуде жұмыс істемейді, себебі бұл мысалды қиындатады:

/* Жолмен құрастырылған: cc -o xtest xtest.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lm */#қосу #қосу #қосу #қосу #қосу #қосу #қосу #қосу #қосу #қосу #қосу #include "bitmap.h" /* Мұнда жоғарыда осы мақалада сипатталғандай BMP тақырыбы анықтамалары берілген */статикалық XImage * CreateImageFromBuffer(Display*, unsigned char *, int, int) ; main(int argc, char * argv ) ( Display * dis; Window Win; /* Біздің терезе */ XEvent оқиғасы; /* Оқиғалар */ GC gc;/* Графикалық контекст */< 2 ) { perror ("use: xtest file.bmpXImage * сурет; int n, ені, биіктігі, fd, өлшемі; XImage * сурет; unsigned char * деректері; BITMAPFILEHEADER bmp; BITMAPINFOHEADER inf; char * buf;егер (argc \n"); шығу(1);) if ((fd = open(argv[ 1 ] , O_RDONLY) ) == - 1 ) ( printf ("Нүктелік кескінді ашу қатесі );шығу(1); /* Буферде оқу */ n = оқу (fd, buf, өлшем) ; басып шығару("өлшем = %d байт оқылды\n " , n); image = CreateImageFromBuffer(дис, буф, ені, биіктігі); /* Буферді жою – бізге ол енді қажет емес */тегін (буф); XMapWindow(dis, win); XSelectInput(dis, win, ExposureMask | KeyPressMask) ; while (1 ) ( XNextEvent(dis, & event) ; if (event.xany .window == win) ( switch (event.type ) ( case Expose: XPutImage(dis, win, gc, image, 0 , 0 , 0) , 0 , image-> width, image-> height) үзу ; exit (EXIT_SUCCESS) default : break ;/* BMP файлынан X кескінін жасайды, себебі BMP кескіні төңкеріліп сақталады * және шағылыстырылады - бұл циклде түзетіледі */ XImage * CreateImageFromBuffer(Display * dis, unsigned char * buf, int ені, int биіктігі) ( int тереңдігі, экран; XImage * img = NULL; int i, j; int numBmpBytes; size_t numImgBytes; int32_t = int32_t; int32_t; int int ih;/* Көрсетілетін жол және баған нөмірлері */< numBmpBytes; i++ ) { unsigned int r, g, b; int new_ind;/* Жаңа индекс */ screen = DefaultScreen(dis) ; тереңдік = DefaultDepth(dis, screen) ;температура = ені * 3;<< 8 | b << 16 ) << 8 ; ind++; } img = XCreateImage(dis, CopyFromParent, depth, ZPixmap, 0 , (char * ) imgBuf, width, height, 32 , 0 ) ; XInitImage(img) ; сызық = температура + ені% 4;/* Жолдың ұзындығы теңестіруді ескере отырып */

BMP файл пішімі (BitMaP тілінен қысқаша) Windows жүйесіне арналған жергілікті растрлық графика пішімі болып табылады, себебі ол жүйе өзінің растрлық массивтерін сақтайтын жергілікті Windows пішіміне барынша сәйкес келеді. BMP пішімінде жиі қолданылатын файл атауы кеңейтімі BMP болып табылады, дегенмен кейбір файлдарда RLE кеңейтімі бар, ол орындалу ұзақтығын кодтауды білдіреді. Файл атауының RLE кеңейтімі әдетте файлдың растрлық ақпараты BMP пішіміндегі файлдар үшін жарамды екі RLE қысу әдісінің бірін пайдаланып қысылғанын көрсетеді.

BMP файлдары әрбір пиксельдің түс ақпаратын 1, 4, 8, 16 немесе 24 битке (бит/пиксель) кодтайды. Түс тереңдігі деп те аталатын пиксельдегі бит саны кескіндегі түстердің максималды санын анықтайды. Тереңдігі 1 бит/пиксель болатын кескінде тек екі түсті, ал тереңдігі 24 бит/пиксельде - 16 миллионнан астам түрлі түстер болуы мүмкін.

Төмендегі диаграмма 256 түсті кескінді (8 бит/пиксель тереңдігі) қамтитын әдеттегі BMP файлының құрылымын көрсетеді. Файл төрт негізгі бөлімге бөлінеді: растрлық графикалық файл тақырыбы, растрлық массив туралы ақпарат тақырыбы, түсті кесте және растрлық жиым деректерінің өзі. Растрлық графикалық файлдың тақырыбы растрлық жиым деректер аймағы басталатын мекенжайды қоса алғанда, файл туралы ақпаратты қамтиды. Растрлық массивтің ақпарат тақырыбы файлда сақталған кескін туралы оның биіктігі мен ені пиксельдегі сияқты ақпаратты қамтиды. Түстер кестесі кескінде қолданылатын түстер үшін RGB (қызыл, жасыл, көк) негізгі түс мәндерін береді. BMP файлдарын оқитын және көрсететін бағдарламалар, 256 түстен артық көрсетуге мүмкіндік бермейтін бейне адаптерлерді пайдаланған кезде, түстерді дәл шығару үшін адаптерлердің түс палитраларында осындай RGB мәндерін бағдарламалық түрде орната алады.

BMP файлындағы нақты растрлық жиым деректерінің пішімі әр пиксел үшін түс деректерін кодтау үшін пайдаланылатын биттердің санына байланысты. 256 түсті кескінде растрлық массивтің нақты деректерін қамтитын файл бөлігіндегі әрбір пиксель бір байтпен (8 бит) сипатталады. Бұл пиксель сипаттамасы RGB түс мәндерін көрсетпейді, бірақ файлдың түстер кестесін енгізу үшін көрсеткіш ретінде қызмет етеді. Осылайша, егер R/G/B=255/0/0 BMP файлының түс кестесінде бірінші RGB түс мәні ретінде сақталса, онда растрлық массивтегі 0 пиксель мәніне ашық қызыл түс тағайындалады. Пиксель мәндері суреттің төменгі жолынан бастап (әдетте) солдан оңға қарай ретпен сақталады. Осылайша, 256 түсті BMP файлында растрлық массив деректерінің бірінші байты кескіннің төменгі сол жақ бұрышында орналасқан пиксель түсінің индексі болып табылады; екінші байт оң жақтағы пиксель түсінің индексін білдіреді, т.б. Әрбір жолдағы байттардың саны тақ болса, растрлық жиым деректерін 16 биттік шекараларда туралау үшін әрбір жолға қосымша байт қосылады. .


Барлық BMP файлдары диаграммада көрсетілгендей құрылымға ие емес. Мысалы, 16 және 24 бит/пиксельді BMP файлдарында түсті кестелер жоқ; бұл файлдарда растрлық массивтің пиксельдік мәндері RGB түс мәндерін тікелей сипаттайды. Файлдың жеке бөлімдерінің ішкі жад пішімдері де әртүрлі болуы мүмкін. Мысалы, кейбір 16 және 256 түсті BMP файлдарындағы растрлық жиым ақпаратын RLE алгоритмі арқылы қысуға болады, ол бірдей кескін пикселдерінің тізбегін реттегі пикселдердің санын және олардың түсін көрсететін таңбалауыштармен ауыстырады. Windows жүйесінде әртүрлі растрлық массив тақырыбы мен түсті кесте пішімдерін пайдаланатын OS/2 стиліндегі BMP файлдарымен жұмыс істеуге болады.

Бұл мақала bmp графикалық пішімі қандай болатыны туралы. Бұл қарапайым форматтардың бірі болғанымен, бұл форматтың көптеген нұсқалары бар болғандықтан, барлық нүктелер анық емес. Ендеше, су құюды тоқтатыңыз, бастайық.

Формат құрылымдары

bmp пішімі (BitMaP – биттік карта немесе орыс тілінде биттік массив деген сөздерден) – бұл Windows ОЖ-де оқуға және көрсетуге өте оңай, көмектесетін арнайы API функциялары бар қысылмаған (негізінен) кескін.

Алдымен деректердің bmp-де графикалық көрінісін берейік (сурет MSDN-ден алынған).

Басында файл тақырыбы (BITMAPFILEHEADER) бар. Ол келесідей сипатталады:

bfTypeфайл түрін анықтайды. Мұнда ол БМ болуы керек. Кез келген BMP файлын мәтіндік редакторда ашсаңыз (немесе жақсырақ, он алтылық редакторда), сіз алғашқы екі таңбаның BM (BitMap сөзінен шыққан) екенін көресіз.
bfSize- файлдың өзінің байттағы өлшемі. Қатаң айтқанда, сіз оны есептеуіңіз керек (бұл ұсынылады), бірақ мен файл өлшемін қате орнаттым (әдейі емес :)) және ешқандай проблемалар болмады (ACDSee проблемасыз оқылды, менің бағдарламам жұмыс істеді), бірақ мен сізге кеңес бермеймін. оны әдейі қате жазыңыз , кенеттен бұл өлшемді нақты өлшеммен салыстыратын және оның bmp емес, басқа нәрсе екенін шешетін адал бағдарлама пайда болады. Ең дұрысы, барлық бағдарламалар, оның жалған емес, нақты bmp екеніне көз жеткізу үшін, біріншіден, bfType құрамында «BM» (тырнақшасыз) бар екенін, екіншіден, bfSize файл өлшеміне тең екенін тексеру керек.
bfReserved1 және bfReserved2сақталған және нөл болуы керек.
bfOffBits. Бұл құрылымдағы ең маңызды салалардың бірі. Ол суретті сипаттайтын нүктелік кескіннің өзі файлдың басына қатысты қай жерде басталатынын көрсетеді (немесе MSDN айтқандай, «BITMAPFILEHEADER құрылымының басынан»). Яғни, массивтің басына жетуге кепілдік беру үшін мынаны жазу керек:

typedef құрылымы tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClr Маңызды;
) BITMAPINFOHEADER, * PBITMAPINFOHEADER;

biSizeқұрылымның өзі өлшемі болып табылады. Оны келесідей инициализациялау қажет: bih.biSize = sizeof(BITMAPINFOHEADER);
Мұнда тағы да bih келесідей жарияланған деп есептейміз: BITMAPINFOHEADER bih;
biWidth және biHeightсуреттің енін және биіктігін сәйкесінше пиксельге орнатыңыз.
қос ұшақтарұшақтардың санын анықтайды. Әзірге ол әрқашан 1-ге орнатылған.
biBitCount- Бір пиксельге бит саны. Бұл туралы төменде толығырақ айтатын боламыз.
biCompressionқысу түрін көрсетеді. bmp кенеттен қысылғанына таң қалмаңыз немесе қорықпаңыз. Мен өзім бір сығылған bmp-ден артық көрмедім (бірақ мен олар жоқ деп айтпаймын). Егер қысу болмаса, бұл жалаушаны BI_RGB етіп орнату керек. Бұл мақалада біз қысылмаған пішім туралы айтып отырмыз, сондықтан мен басқа жалаушаларды да тізімдемеймін. JPEG және PNG файлдарында бірдей құрылым қолданылатын сияқты, өйткені Windows 98 жүйесінен бастап BI_JPEG опциялары пайда болды, бұл суреттің JPEG және BI_PNG екенін, оның PNG екенін көрсетеді (Jpeg пішімі туралы ештеңе білмеймін, Мен бұл тұжырымдарды MSDN-де жазылғандарға сүйене отырып жасадым).
biSizeImageсуреттің өлшемін байтпен көрсетеді. Егер кескін қысылмаған болса (яғни алдыңғы өріс BI_RGB мәніне орнатылған болса), онда мұнда нөл жазылуы керек. biXPelsPerMeterЖәне biYPelsPerMeterнүктелік кескін (растр) шығарылатын соңғы құрылғының сәйкесінше көлденең және тік ажыратымдылығын (метрге пикселдермен) білдіреді. Бағдарлама осы мәнді ресурстар тобынан қалаған құрылғы үшін ең сәйкес нүктенің суретін таңдау үшін пайдалана алады. Шындығында, bmp пішімі негізінен аппараттық құралға тәуелсіз растр болып табылады, яғни алынған нәрсенің пайда болуы бұл растрдың неге проекцияланатынына байланысты емес (бұлайша айтқанда). Мысалы, сурет монитор экранында салынғанына немесе принтерде басылғанына қарамастан бірдей болады. Бірақ құрылғылардың ажыратымдылығы әртүрлі және дәл осы параметрлер қол жетімді суреттерден ең қолайлы суретті таңдау үшін қолданылады.
biClrUsedкестеден қолданылған түстердің санын анықтайды. Егер бұл мән нөлге тең болса, онда растр biBitCount мәні рұқсат еткен түстердің максималды санын пайдаланады. Бұл тек қысылған кескіндерге қатысты. Егер biClrUsed нөл емес болса және biBitCount 16-дан аз болса, онда biClrUsed графикалық механизм немесе қол жетімді құрылғы драйвері түстерінің ағымдағы санын анықтайды. Егер biBitCount 16-дан үлкен немесе оған тең болса, biClrUsed ағымдағы жүйе палитрасын оңтайландыру үшін пайдаланылатын түстер кестесінің өлшемін анықтайды.
biClr Маңызды- бұл маңызды түстердің саны. Сызбаны бейнелеу үшін қажетті түстер санын анықтайды. Егер бұл мән 0 болса (әдетте солай), онда барлық түстер маңызды болып саналады.

BMP форматының түрлері

bmp форматының барлық түрлері шартты түрдепалитра және палитрасыз деп екі түрге бөлуге болады. Яғни, палитра берілген форматта қолданылады ма, жоқ па. Палитра тіпті бояғышсыз пішімдерде болуы мүмкін екенін ескеріңіз, бірақ ол жерде пайдаланылмайды. Палитрасыз bmp файлдарында түс белгілі бір жерден бастап файлға кіретін биттерден тікелей есептеледі. Ал палитраларда әрбір байт бір немесе бірнеше пикселдерді сипаттайды, ал байт (немесе бит) мәндері палитрадағы түс индексі болып табылады. Алдымен мен ықтимал нұсқаларды салыстыратын кестені беремін. Суреттің түрі (бояғышты немесе палитрасыз) бір пиксельге қанша бит берілгеніне, яғни BITMAPINFOHEADER құрылымының biBitCount мәніне байланысты.

biBitCountПалитра немесе палитрадан тыс пішімТүстердің максималды мүмкін саныЖазбалар 1 Палитра2 Екі түсті, ақ-қара емес, палитра суреті. Егер растрлық бит (ол дәл төменде) қалпына келтірілсе (0-ге тең), онда бұл палитрадағы бірінші түс осы жерде болуы керек, ал орнатылған болса (1-ге тең), екіншісі. 4 Палитра16 Әрбір байт 2 пикселді сипаттайды. Міне, MSDN мысалы, егер суреттегі бірінші байт 0x1F болса, онда ол екі пикселге сәйкес келеді, біріншінің түсі палитрадағы екінші түс (өйткені кері санақ нөлден басталады), ал екінші пиксель. палитраның 16-шы түсі. 8 Палитра256 Ең көп таралған нұсқалардың бірі. Бірақ сонымен бірге ең қарапайымдары. Палитра бір килобайтты алады (бірақ онымен санаспаған дұрыс). Бір байт бір түсті. Оның үстіне оның мәні палитрадағы түс саны болып табылады. 16 Палитра жоқ2^16 немесе 2^15Бұл ең шатастыратын нұсқа. Оның палитрасыз, яғни растрдағы әрбір екі байт (бір WORD сөзі) бір пикселді бірегей түрде анықтайтынынан бастайық. Бірақ мынандай болады: 16 бит және 3 түсті құрамдас (Қызыл, Жасыл, Көк) бар. Бірақ 16 саны 3-ке бөлінгісі келмейді. Сондықтан мұнда екі нұсқа бар. Біріншісі - 16 емес, 15 бит пайдалану, содан кейін әр түсті құрамдас үшін 5 бит бар. Осылайша біз максимум 2^15 = 32768 түсті пайдалана аламыз, нәтижесінде үш есе R-G-B = 5-5-5 болады. Бірақ содан кейін 16-ның бір бөлігі босқа босқа кетеді, бірақ біздің көздер барлық түстер арасында жасылды жақсырақ қабылдайды, сондықтан біз осы битті жасыл құрамдас бөлікке беруді шештік, яғни содан кейін біз аламыз. үштік R-G-B = 5-6-5, енді біз 2^16 = 65536 түсті пайдалана аламыз. Бірақ ең жағымсыз нәрсе - екі нұсқа да қолданылады. MSDN қанша түстер қолданылғанын ажырату үшін BITMAPINFOHEADER құрылымындағы biClrUsed өрісін осы мәнмен толтыруды ұсынады. Әрбір компонентті таңдау үшін келесі маскаларды пайдалану керек. 5-5-5 пішімі үшін: көк компонент үшін 0x001F, жасыл үшін 0x03E0 және қызыл үшін 0x7C00. 5-6-5 пішімі үшін: 0x001F - көк, 0x07E0 - жасыл және 0xF800 қызыл, тиісінше. 24 Палитра жоқ2^24 Және бұл ең қарапайым формат. Мұнда 3 байт 3 түсті құрамдастарды анықтайды. Яғни бір байт үшін бір компонент. Біз жай ғана RGBTRIPLE құрылымын оқып, оның rgbtBlue, rgbtGreen, rgbtRed өрістерін қолданамыз. Олар сол тәртіппен жүреді. 32 Палитра жоқ2^32 Мұнда 4 байт 3 компонентті анықтайды. Бірақ, алайда, бір байт пайдаланылмайды. Оны, мысалы, альфа арнасы (мөлдірлік) үшін пайдалануға болады. Бұл жағдайда келесідей сипатталған RGBQUAD құрылымдарын пайдаланып растрды оқу ыңғайлы:

bmp форматында деректерді сақтау

Ал, енді біз ең қызықты бөлікке келдік. BITMAPFILEHEADER және BITMAPINFOHEADER құрылымдарынан кейін палитра келеді. Сонымен қатар, егер пішім палитрасыз болса, онда ол болмауы мүмкін, бірақ оған сенбеу керек. Шындығында, мен bmp пішімін енді ғана түсіне бастағанда, мен бір кітаптан оқыдым, егер формат палитрасыз болса, онда оның палитрасы мүлде болмайды. Тіпті екі сурет болды - формат диаграммалары: біреуі палитрасы бар, екіншісі жоқ. Сол кезде мен bmp файлдарымен ынталы жұмыс істейтін бағдарлама жазып жүрдім. Маған кіріс кескіндерді 256 түстен 24 битке (бар болса) уақытша файлдарға түрлендіруге тура келді. Мен жай ғана 24-биттік палитраны жасамадым (BITMAPFILEHEADER құрылымындағы bfOffBits саны sizeof(BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) қосындысына тең болды және кіріс 24-биттерді өзгеріссіз қалдырды. 256 түсті растрлармен барлығын Қажетті бөліктің орнына төменгі жағында қоқыс көрсетілген 24 биттік кескінді көрмейінше, мен бастапқы файлдың өлшемін салыстырмайынша бірден түсінбедім Егер палитра болмаса, онда болуы керек еді. Айырмашылық 1024 байт болды. Сондықтан палитраның бар-жоғына сенбеңіз (бірақ мен кездестірген барлық суреттердің палитрасы 256 түсті немесе 1Кб болса да), bfOffBits көмегімен әрқашан файл арқылы растрдың басына жылжытыңыз палитрада барлық түстер пайдаланылмайды (бірақ тек, мысалы, 16), содан кейін жиі 256 өрістер A 256 * 4 = 1024 үшін бөлінеді, мұнда 4 RGBQUAD құрылымының өлшемі, яғни бірдей бір килобайт алынады.

Палитрадан кейін бірден растрдың өзі келеді. Дәл осы жерде істер шатасады. Біріншіден, мұнда пикселдер пішімге байланысты жоғарыдағы кестеде жазылғандай сипатталады. Және олардың өздері түс құрамдастарының мәнін (бояғышсыздар үшін) қамтуы мүмкін немесе олар палитра массивінің индекстері болуы мүмкін. Суреттің өзі жол-жол жазылады. Екіншіден, сурет төңкерілген сияқты. Яғни, алдымен астыңғы жол, содан соң соңғы жол, ең жоғарғы жағына дейін жазылады. Үшіншіден, жазылғандай, растрлық жолдың өлшемі 4-ке еселік болмаса, онда жолдың ұзындығы абзацқа еселік болатындай етіп 1-ден 3-ке дейін бос (нөлдік) байтпен толтырылады. Бұл ең жағымсыз нәрсе. Әрбір пішім үшін бос байттардың осы санын реттеу керек (бірақ мен палитраның бір бөлігін сол жерге жазғанды ​​ұнатамын, егер бұл байттар бәрібір өткізілсе және ешкім болмаса, мен қосымша «нөлдік» айнымалылар жасағым келмейді. оларға мұқтаж). Мен жолдың соңына қанша байт қосу керектігін көрсететін формулалары бар кестені беремін. Мұнда Width айнымалысы, сіз болжағандай, кескіннің енін білдіреді. Бұл формулалардың барлығы эксперименталды түрде орнатылды. Мен ең көп қолданылатын пішімдерге ғана мысал келтіремін. Қалғаны үшін оны өзіңіз жаза аласыз.

Мысал бағдарламалар

Барлық дереккөздерді жүктеп алуға болады, мен мұнда көп жазбаймын. Мен функцияларды түсініктемелермен ғана беремін.

Сәлем 1. bmp форматында сурет жасау.
Мұнда монохроматикалық сурет жасалады. Мұндай функциялардың үш мысалы бар: bmp 8, 16 және 24 биттерді жасау. Мен тек 16 бит үшін беремін.

// 5-5-5 сияқты 16 бит bmp форматында сурет жасайық, ол жай монохроматикалық болады.
void CreateBmp555(char * fname, WORD түсі)
{
HANDLE hFile;
DWORD RW;
int i, j;

// Қажетті құрылымдарды жариялаңыз
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
BYTE палитрасы[1024];

// Палитра
// 35 x 50 пиксель кескінін алайық
int Ені = 35;

int биіктігі = 50; memset(Palette, 0, 1024);
// Палитрада бізде нөлдер бар, оларды толтырыңыз

memset (&bfh, 0 , sizeof (bfh) ); Bfh.bfType = 0x4D42 ;
// Бұл bmp «BM» екенін белгілейік bfh.bfOffBits = sizeof (bfh) + sizeof (bih) + 1024 ;
// Палитра 1Кб алады, бірақ біз оны пайдаланбаймыз
bfh.bfSize = bfh.bfOffBits +
sizeof(түсі) * Ені * Биіктігі + Height * ((sizeof (color) * Width) % 4 ) ;
// Соңғы файлдың өлшемін есептеңіз
memset (&bih, 0 , sizeof (bih) );
bih.biSize = sizeof(bih); // Солай болуы керек
bih.biBitCount = 16; // Біз 5-5-5 қолданамыз
bih.biCompression = BI_RGB;
// Қысу жоқ
bih.biHeight = Биіктігі;
bih.biWidth = Ені;
bih.biPlanes = 1 ;

// 1 болуы керек
// Ал қалған өрістер 0 болып қалады
HFile = CreateFile (fname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);

егер (hFile == INVALID_HANDLE_VALUE)
қайтару;
// Тақырыптарды жазыңыз

WriteFile (hFile, & bfh, sizeof (bfh) , & RW, NULL );
WriteFile (hFile, & bih, sizeof (bih) , & RW, NULL );
// Палитраны жазыңыз< Height; i++ )
{
WriteFile(hFile, Палитра, 1024, &RW, NULL);< Width; j++ )
{
үшін (i = 0; i
}

үшін (j = 0; j
WriteFile (hFile, & color, sizeof (түс) , & RW, NULL );
}
// Шекарамен туралаңыз
}

WriteFile (hFile, Палитра, (өлшемі (түс) * Ені) % 4 , & RW, NULL );

CloseHandle(hFile) ;

түс - сурет түсі. Бұл айнымалының мәні бірінші кестеге сәйкес толтырылуы керек. Сіз, мысалы, ACDSee ішінде алынған суретті көре аласыз. Мен оны Photoshop-та ашуға тырыстым, бірақ ол оларды бұл форматта оқи алмайтыны белгілі болды.
{
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
Мысал 2. Суретті 8-биттік пішімнен (256 түс) 24-битке түрлендіру.
BOOL Convert256To24 (char * fin, char * fout)
int Ені, биіктігі;
RGBQUAD палитрасы[256];
BYTE * inBuf;
DWORD RW;
RGBTRIPLE * outBuf;
int i, j;

HANDLE hIn, hOut;
DWORD OffBits;
HIn = Файл жасау (fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

егер (hIn == INVALID_HANDLE_VALUE)
FALSE қайтару;
{
HOut = Файл жасау(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
HIn = Файл жасау (fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
}

егер (hOut == INVALID_HANDLE_VALUE)
CloseHandle(hIn);
// Деректерді оқу
ReadFile (hIn, & bfh, sizeof (bfh) , & RW, NULL );

ReadFile (hIn, & bih, sizeof (bih) , & RW, NULL );
ReadFile (hIn, Палитра, 256 * sizeof (RGBQUAD) , & RW, NULL );
// Меңзерді растрдың басына орнатыңыз
SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN) ;
Ені = bih.biWidth;

Биіктігі = bih.biHeight ;
OffBits = bfh.bfOffBits;
// Жадты бөлу

inBuf = new BYTE [Ені];
outBuf = new RGBTRIPLE [Ені]; // Тақырыптарды толтырыңыз
bfh.bfOffBits = sizeof (bfh) + sizeof (bih) ;
// Палитра жазбайық

bih.biBitCount = 24;
егер (hFile == INVALID_HANDLE_VALUE)
bfh.bfSize = bfh.bfOffBits + 4 * Ені * Биіктігі + Биіктігі * (Ені % 4);
// Файл өлшемі

// Ал қалғандары өзгеріссіз қалады
// Палитраны жазыңыз< Height; i++ )
{
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL );
WriteFile(hFile, Палитра, 1024, &RW, NULL);< Width; j++ )
{
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL );
outBuf[ j].rgbtGreen = Палитра[ inBuf[ j] ] .rgbGreen ;
outBuf[ j].rgbtBlue = Палитра[ inBuf[ j] ] .rgbBlue ;
}
WriteFile (hOut, outBuf, sizeof (RGBTRIPLE) * Ені, & RW, NULL );

// Туралау үшін қоқысты жазыңыз
WriteFile (hOut, Палитра, Ені % 4 , & RW, NULL );
SetFilePointer(hIn, (3 * Ені) % 4, NULL, FILE_CURRENT) ;
}

inBuf жою;
outBuf жою;
HOut = Файл жасау(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
CloseHandle(hOut);
TRUE қайтару;
}

Бастапқы және тағайындалған файлдардың атаулары сәйкесінше функцияға берілуі керек.

Егер сіз компьютеріңізге орнатқан болсаңыз антивирустық бағдарламамүмкін компьютердегі барлық файлдарды, сондай-ақ әрбір файлды жеке сканерлеңіз. Файлды тінтуірдің оң жақ түймешігімен басып, файлды вирустарға сканерлеу үшін сәйкес опцияны таңдау арқылы кез келген файлды сканерлеуге болады.

Мысалы, бұл суретте ол бөлектелген my-file.bmp файлы, содан кейін осы файлды тінтуірдің оң жақ түймешігімен басып, файл мәзіріндегі опцияны таңдау керек «AVG көмегімен сканерлеу». Бұл опцияны таңдаған кезде AVG Antivirus ашады және файлды вирустарға тексереді.


Кейде нәтижесінде қате пайда болуы мүмкін бағдарламалық құралды қате орнату, бұл орнату процесінде туындаған мәселеге байланысты болуы мүмкін. Бұл операциялық жүйеңізге кедергі келтіруі мүмкін BMP файлыңызды дұрыс қолданба құралымен байланыстырыңыз, деп аталатын әсер етеді «файл кеңейтімінің ассоциациялары».

Кейде қарапайым Adobe Illustrator CC қайта орнату BMP файлын Adobe Illustrator CC бағдарламасымен дұрыс байланыстыру арқылы мәселеңізді шеше аласыз. Басқа жағдайларда файл байланыстарымен проблемалар туындауы мүмкін нашар бағдарламалық қамтамасыз етуәзірлеуші ​​және қосымша көмек алу үшін әзірлеушіге хабарласу қажет болуы мүмкін.


Кеңес:Ең соңғы түзетулер мен жаңартулар бар екеніне көз жеткізу үшін Adobe Illustrator CC бағдарламасын соңғы нұсқаға жаңартып көріңіз.


Бұл тым айқын көрінуі мүмкін, бірақ жиі Мәселені BMP файлының өзі тудыруы мүмкін. Егер сіз файлды электрондық пошта тіркемесі арқылы алсаңыз немесе оны веб-сайттан жүктеп алсаңыз және жүктеу процесі үзілсе (мысалы, электр қуатының үзілуі немесе басқа себеп), файл зақымдалуы мүмкін. Мүмкін болса, BMP файлының жаңа көшірмесін алып, оны қайта ашып көріңіз.


Мұқият:Зақымдалған файл сіздің компьютеріңіздегі бұрынғы немесе бар зиянды бағдарламаға кепілдік зақымдануды тудыруы мүмкін, сондықтан компьютеріңізде әрқашан жаңартылған антивирус жұмыс істеп тұруы маңызды.


Егер сіздің файлыңыз BMP болса компьютеріңіздегі аппараттық құралға қатыстықажет болуы мүмкін файлды ашу үшін құрылғы драйверлерін жаңартуосы жабдықпен байланысты.

Бұл мәселе әдетте медиа файл түрлерімен байланысты, бұл компьютер ішіндегі аппараттық құралды сәтті ашуға байланысты, мысалы. дыбыс картасы немесе бейне карта. Мысалы, аудио файлды ашқыңыз келсе, бірақ оны аша алмасаңыз, сізге қажет болуы мүмкін дыбыс картасының драйверлерін жаңарту.


Кеңес:Егер сіз BMP файлын ашуға тырыссаңыз, сіз аласыз .SYS файлының қате туралы хабары, мәселе болуы мүмкін зақымдалған немесе ескірген құрылғы драйверлерімен байланыстыбұл жаңартуды қажет етеді. Бұл процесті DriverDoc сияқты драйверді жаңарту бағдарламалық құралын пайдалану арқылы жеңілдетуге болады.


Қадамдар мәселені шешпесежәне сізде BMP файлдарын ашуда проблемалар әлі де бар, бұл осыған байланысты болуы мүмкін қол жетімді жүйелік ресурстардың болмауы. BMP файлдарының кейбір нұсқалары компьютерде дұрыс ашылуы үшін ресурстардың айтарлықтай көлемін (мысалы, жад/RAM, өңдеу қуаты) қажет етуі мүмкін. Егер сіз ескі компьютерлік жабдықты және сонымен бірге әлдеқайда жаңа операциялық жүйені пайдалансаңыз, бұл мәселе өте жиі кездеседі.

Бұл мәселе операциялық жүйе (және фондық режимде жұмыс істейтін басқа қызметтер) компьютер тапсырманы орындауда қиындықтарға тап болған кезде орын алуы мүмкін. BMP файлын ашу үшін тым көп ресурстарды тұтыну. Растрлық кескін файлын ашпас бұрын компьютердегі барлық қолданбаларды жауып көріңіз. Компьютердегі барлық қолжетімді ресурстарды босату сізге BMP файлын ашу әрекеті үшін ең жақсы шарттарды қамтамасыз етеді.


Егер сіз жоғарыда сипатталған барлық қадамдарды орындаңызжәне сіздің BMP файлыңыз әлі ашылмайды, сізге іске қосу қажет болуы мүмкін жабдықты жаңарту. Көптеген жағдайларда, аппараттық құралдардың ескі нұсқаларын пайдаланған кезде де өңдеу қуаты көптеген пайдаланушы қолданбалары үшін жеткілікті болуы мүмкін (егер сіз 3D көрсету, қаржылық/ғылыми модельдеу немесе қарқынды мультимедиялық жұмыс). Осылайша, компьютеріңізде жады жеткіліксіз болуы мүмкін(әдетте «ЖЖҚ» немесе жедел жад деп аталады) файлды ашу тапсырмасын орындау үшін.




Жоғарғы