есть RAW файл, в котором ,как я язнаю, а я знаю, содержится информация о битмапе, цветность 16 бит на пиксель, также известны размеры по ширине и высоте, нужно создать из этих данных битмап файл(*.BMP) так, что бы он был 16 битным. Для того, что бы была возможность изменить его в фотошопе и из вышедшего из фотошопа битмапа изъять тот же, что и вначале массив цветов пикселей. Вроде просто, но: bpp=16 width=285 height=530 Код (Text): VOID extract_res (int iter,PCHAR pRes,int width,int height) { BITMAPFILEHEADER bfh; BITMAPINFOHEADER bi; CHAR* path= NULL; CHAR dstbuff[MAX_SIZE]; FILE* hBmpFile= NULL; memset(&bfh,0x00,sizeof(bfh)); memset(&bi,0x00,sizeof(bi)); bfh.bfType=(WORD)0x4D42; bfh.bfSize=(DWORD)(sizeof(bi)+sizeof(bfh)+width*height*bpp/8); bfh.bfReserved1=0; bfh.bfReserved2=0; bfh.bfOffBits=sizeof(bi)+sizeof(bfh); bi.biSize=sizeof(bi); bi.biBitCount=bpp; bi.biClrImportant=0; bi.biClrUsed=0; bi.biCompression=BI_RGB; bi.biHeight=-height; bi.biPlanes=1; bi.biSizeImage=0; bi.biWidth=width; bi.biXPelsPerMeter=0; bi.biYPelsPerMeter=0; _itoa(iter,dstbuff,10); path=strcat(dstbuff,"_res.bmp"); fopen_s(&hBmpFile,path,"w+b"); fwrite((void *)&bfh,sizeof(BITMAPFILEHEADER),sizeof(BYTE),hBmpFile); fwrite((void *)&bi,sizeof(BITMAPINFOHEADER),sizeof(BYTE),hBmpFile); fwrite(pRes,width*height*bpp/8,sizeof(BYTE),hBmpFile); fflush(hBmpFile); fclose(hBmpFile); } Это собсно то, что я наваял сразу. Но ,битмап выходи косячный. Прилогаю RAW данные и то что получается и то что должно выйти.
pRes указывает на начало данных. Iter так для успокоения и прочей бредни. поможайте, весь msdn облазил...
Код (Text): _itoa(iter,dstbuff,10); path=strcat(dstbuff,"_res.bmp"); fopen_s(&hBmpFile,path,"w+b"); fwrite((void *)&bfh,sizeof(BITMAPFILEHEADER),sizeof(BYTE),hBmpFile); fwrite((void *)&bi,sizeof(BITMAPINFOHEADER),sizeof(BYTE),hBmpFile); //write lines to fill line by line adjusted to dword size ptr=pRes; n=int(width%sizeof(DWORD)); n+=1; for (int i=0;i<height;i++) { fwrite(ptr,width*bpp/8,sizeof(BYTE),hBmpFile); fwrite(&close_line,n,sizeof(BYTE),hBmpFile); ptr+=width*bpp/8; }
punxer С цветами тоже разобрался? В первой версии твоей картинки проблема в том, что у тебя наверно по 5 бит на каждую компоненту, а у винды на зелёную выделено 6 бит, или наоборот. это вообще бред. должно быть n=(-width*bpp/8)%4