亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? load_save.c

?? linux下實現(xiàn)的bmp的讀寫,主function與load_save分開寫,有Makefile
?? C
字號:
#include "load_save.h"

static unsigned short read_word(FILE *fp);
static unsigned int   read_dword(FILE *fp);
static int            read_long(FILE *fp);

static int            write_word(FILE *fp, unsigned short w);
static int            write_dword(FILE *fp, unsigned int dw);
static int            write_long(FILE *fp, int l);

U8* loadbitmap(const char *filename, BITMAPINFO **info)
{
	 FILE        *fp;          // Open file pointer 
    U8          *bits;        // Bitmap pixel bits 
    U8          *ptr;         // Pointer into bitmap 
    U8          temp;         // Temporary variable to swap red and blue 
    int         i, x, y;      // X and Y position in image 
    int         length;       // Line length 
    int         bitsize;      // Size of bitmap 
    int         infosize;     // Size of header information 
    BmpHead header;       		// File header 

    // Try opening the file; use "rb" mode to read this *binary* file. 
    if ((fp = fopen(filename, "rb")) == NULL){
       printf("open read_file erro!\n");
       return (NULL);
	 }
    // Read the file header and any following bitmap information... 
    header.filetype      = read_word(fp);
    header.filesize      = read_dword(fp);
    header.bland1 = read_word(fp);
    header.bland2 = read_word(fp);
    header.startPosition   = read_dword(fp);

    if (header.filetype != 0x4d42)  // Check for BM reversed... 
    {
        printf(" Not a bitmap file - return NULL... \n");
        fclose(fp);
        return (NULL);
    }

    infosize = header.startPosition - 14;
    if ((*info = (BITMAPINFO *)malloc(sizeof(BITMAPINFO))) == NULL)
    {
        printf(" Couldn't allocate memory for bitmap info - return NULL..\n");
        fclose(fp);
        return (NULL);
    }


    (*info)->InfoHead.Length			= read_dword(fp);
    (*info)->InfoHead.width         = read_long(fp);
    (*info)->InfoHead.height        = read_long(fp);
    (*info)->InfoHead.colorPlane    = read_word(fp);
    (*info)->InfoHead.bitColor      = read_word(fp);
    (*info)->InfoHead.zipFormat   	= read_dword(fp);
    (*info)->InfoHead.realSize     	= read_dword(fp);
    (*info)->InfoHead.xPels 			= read_long(fp);
    (*info)->InfoHead.yPels 			= read_long(fp);
    (*info)->InfoHead.colorUse      = read_dword(fp);
    (*info)->InfoHead.colorImportant= read_dword(fp);

    if (infosize > 40)
		if (fread((*info)->bmiColors, infosize - 40, 1, fp) < 1)
      {
            printf("Couldn't read the bitmap header - return NULL...\n"); 
            free(*info);
            fclose(fp);
            return (NULL);
            }

   // Now that we have all the header info read in, allocate memory for the bitmap and read *it* in...                                    
    if ((bitsize = (*info)->InfoHead.realSize) == 0)
        bitsize = ((*info)->InfoHead.width *
                   (*info)->InfoHead.bitColor + 7) / 8 *
  	           abs((*info)->InfoHead.height);

    if ((bits = (U8 *)malloc(sizeof(U8)*bitsize)) == NULL)
    {
        printf("Couldn't allocate memory - return NULL! \n");
        free(*info);
        fclose(fp);
        return (NULL);
    }

    if (fread(bits, 1, bitsize, fp) < bitsize)
    {
        printf("Couldn't read bitmap - free memory and return NULL! \n");
        free(*info);
        free(bits);
        fclose(fp);
        return (NULL);
      }

    // Swap red and blue 
/*
    length = ((*info)->InfoHead.width * 3 + 3) & ~3;
    for (y = 0; y < (*info)->InfoHead.height; y ++)
        for (ptr = bits + y * length, x = (*info)->InfoHead.width;
             x > 0;
	     x --, ptr += 3)
	    {
	    temp   = ptr[0];
	    ptr[0] = ptr[2];
	    ptr[2] = temp;
	    }
	for(i=0;i<1024;i++)
		printf("%x ", bits[i]);
*/
    // OK, everything went fine - return the allocated bitmap... 
    fclose(fp);
    return (bits);
}

  // O - 0 = success, -1 = failure 
int savebitmap(const char *filename, BITMAPINFO **info, U8 *bits)  // target filename , BitMap infomation, image data
{
    FILE *fp;                      // Open file pointer 
    int  size,                     // Size of file 
         infosize,                 // Size of bitmap info 
         bitsize;                  // Size of bitmap pixels 

   // Try opening the file; use "wb" mode to write this *binary* file. 
    if ((fp = fopen(filename, "wb")) == NULL){
        printf("open write file error\n");
        return (-1);
        }

    // Figure out the bitmap size 
    if ((*info)->InfoHead.realSize == 0)
		bitsize = ((*info)->InfoHead.width *
        	   (*info)->InfoHead.bitColor + 7) / 8 *
		((*info)->InfoHead.height);
    else
		bitsize = (*info)->InfoHead.realSize;

    // Figure out the header size 
	switch((*info)->InfoHead.bitColor)
	{
		case 4:
			infosize=108;
			break;
		case 8:
			infosize=1064;
			break;
		case 16:
		case 24:
		case 32:
			infosize=40;
			break;
	}
   switch ((*info)->InfoHead.zipFormat)
	{/*
	case BI_BITFIELDS :
            infosize += 12; // Add 3 RGB doubleword masks 
            if ((*info)->InfoHead.colorUse == 0)
	      break;*/
	case 0 :
            if ((*info)->InfoHead.bitColor > 8 &&
        	(*info)->InfoHead.colorUse == 0)
	      break;/*
	case BI_RLE8 :
	case BI_RLE4 :
            if ((*info)->InfoHead.colorUse == 0)
              infosize += (1 << (*info)->InfoHead.bitColor) * 4;
	    else
              infosize += (*info)->InfoHead.colorUse * 4;
	    break;*/
	}

    size = sizeof(BmpHead) + infosize + bitsize;
    // Write the file header, bitmap information, and bitmap pixel data... 
    write_word(fp, 0x4d42);        	// bfType 
    write_dword(fp, size);          // bfSize 
    write_word(fp, 0);              // bfReserved1 
    write_word(fp, 0);              // bfReserved2 
    write_dword(fp, 14 + infosize); // bfOffBits 

    write_dword(fp, (*info)->InfoHead.Length);
    write_long(fp, (*info)->InfoHead.width);
    write_long(fp, (*info)->InfoHead.height);
    write_word(fp, (*info)->InfoHead.colorPlane);
    write_word(fp, (*info)->InfoHead.bitColor);
    write_dword(fp, (*info)->InfoHead.zipFormat);
    write_dword(fp, (*info)->InfoHead.realSize);
    write_long(fp, (*info)->InfoHead.xPels);
    write_long(fp, (*info)->InfoHead.yPels);
    write_dword(fp, (*info)->InfoHead.colorUse);
    write_dword(fp, (*info)->InfoHead.colorImportant);

    if (infosize > 40)
		if (fwrite((*info)->bmiColors, infosize - 40, 1, fp) < 1)
      {
          printf("Couldn't write the bitmap header - return... \n");
          fclose(fp);
          return (-1);
       }

    if (fwrite(bits, 1, bitsize, fp) < bitsize)
    {
        printf(" Couldn't write the bitmap - return... \n");
        fclose(fp);
        return (-1);
     }

    // OK, everything went fine - return... 
    fclose(fp);
    return (0);
    }


 // 'read_word()' - Read a 16-bit unsigned integer.

// O - 16-bit unsigned integer 
static unsigned short read_word(FILE *fp)       //  File read from 
{
    unsigned char b0, b1; // Bytes from file 
    b0 = getc(fp);
    b1 = getc(fp);
    return ((b1 << 8) | b0);
}

 // 'read_dword()' - Read a 32-bit unsigned integer.

// O - 32-bit unsigned integer 
static unsigned int read_dword(FILE *fp)        // File read from 
{
    unsigned char b0, b1, b2, b3; 					// Bytes from file 

    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);

    return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}

// 'read_long()' - Read a 32-bit signed integer.

// O - 32-bit signed integer 
static int read_long(FILE *fp)               	// File read from 
{
    unsigned char b0, b1, b2, b3; // Bytes from file

    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);

    return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}

// 'write_word()' - Write a 16-bit unsigned integer.

 // O - 0 on success, -1 on error 
static int write_word(FILE *fp, unsigned short w)   // target file pointer , Integer to write 
{
    putc(w, fp);
    return (putc(w >> 8, fp));
}

// 'write_dword()' - Write a 32-bit unsigned integer.

// O - 0 on success, -1 on error 
static int write_dword(FILE *fp, unsigned int dw)  // target file pointer write , Integer to write 
{
    putc(dw, fp);
    putc(dw >> 8, fp);
    putc(dw >> 16, fp);
    return (putc(dw >> 24, fp));
}

// 'write_long()' - Write a 32-bit signed integer.

// O - 0 on success, -1 on error 
static int write_long(FILE *fp, int  l)   // target file pointer of write  ,Integer to write 
{
    putc(l, fp);
    putc(l >> 8, fp);
    putc(l >> 16, fp);
    return (putc(l >> 24, fp));
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级精品在线观看| 成人免费视频网站在线观看| 亚洲精品国久久99热| 亚洲视频你懂的| 日韩理论片在线| 亚洲婷婷综合久久一本伊一区| 国产精品成人免费| 亚洲人成人一区二区在线观看 | 欧美一区二区三区播放老司机| 欧美三区在线视频| 欧美精品国产精品| 日韩精品资源二区在线| 久久综合色婷婷| 国产日产亚洲精品系列| 国产精品麻豆网站| 亚洲欧美一区二区不卡| 亚洲午夜国产一区99re久久| 天天av天天翘天天综合网色鬼国产| 午夜成人在线视频| 另类小说图片综合网| 国产成人综合视频| 99国产精品国产精品毛片| 色妞www精品视频| 欧美日本精品一区二区三区| 日韩三级伦理片妻子的秘密按摩| 精品久久久久久久久久久久久久久| 26uuu精品一区二区| 国产精品久久久久久久久果冻传媒| 自拍偷拍亚洲激情| 日本麻豆一区二区三区视频| 国产麻豆一精品一av一免费 | 久久青草欧美一区二区三区| 亚洲国产精品成人综合色在线婷婷| 中文字幕亚洲精品在线观看| 亚洲一区二区精品久久av| 青青国产91久久久久久| 国产精品综合久久| 色94色欧美sute亚洲线路二| 日韩视频一区二区三区在线播放| 国产欧美日本一区二区三区| 一区二区三区精密机械公司| 美女一区二区久久| av不卡一区二区三区| 欧美日韩高清一区二区不卡| 久久精品欧美日韩| 亚洲18色成人| 国产69精品久久久久毛片| 精品视频一区三区九区| 国产欧美日韩在线看| 亚洲成人高清在线| 国产精品羞羞答答xxdd| 欧美性一区二区| 亚洲影院久久精品| 自拍偷在线精品自拍偷无码专区| 日本成人中文字幕在线视频| 99这里只有精品| 日韩一区二区免费视频| 亚洲丝袜自拍清纯另类| 精品一二三四在线| 欧美在线观看视频在线| 久久精品一区二区| 日韩不卡一区二区三区| 99精品欧美一区二区三区综合在线| 欧美一区二区三区在线观看 | 欧美丝袜自拍制服另类| 精品久久人人做人人爱| 亚洲一区二区黄色| 成人av网站在线| 精品日韩在线观看| 亚洲第一激情av| 波多野结衣亚洲一区| 26uuu国产电影一区二区| 天天操天天色综合| 色欧美片视频在线观看在线视频| 久久中文娱乐网| 色婷婷精品久久二区二区蜜臂av | 欧美日韩激情在线| 国产精品亲子伦对白| 国产资源在线一区| 欧美精品三级日韩久久| 一区二区三区中文字幕在线观看| 国产精品综合在线视频| 精品国产伦一区二区三区免费| 亚洲丰满少妇videoshd| 99久久99久久精品免费看蜜桃| 久久久五月婷婷| 极品尤物av久久免费看| 欧美一区二区福利在线| 亚洲高清久久久| 在线免费一区三区| 亚洲视频精选在线| 97精品久久久午夜一区二区三区| 国产亚洲一本大道中文在线| 国产老妇另类xxxxx| 欧美r级电影在线观看| 蜜桃av噜噜一区| 欧美一卡二卡三卡| 日韩精品一级中文字幕精品视频免费观看| 日本精品视频一区二区三区| 亚洲天堂网中文字| 91蜜桃网址入口| 亚洲精品日韩综合观看成人91| www.av精品| 一色桃子久久精品亚洲| 91网上在线视频| 亚洲精品写真福利| 在线观看www91| 亚洲高清不卡在线观看| 欧美日韩一区不卡| 日韩国产高清影视| 欧美成人一区二区三区在线观看 | 蜜桃精品视频在线| 日韩一级黄色大片| 极品美女销魂一区二区三区免费| 精品国产一二三区| 国产成人精品在线看| 国产精品你懂的在线| 99在线热播精品免费| 亚洲综合清纯丝袜自拍| 欧美日韩视频不卡| 日本免费新一区视频| 久久亚洲精品小早川怜子| 成人黄色软件下载| 亚洲视频免费在线| 欧美日本韩国一区| 国内精品第一页| 国产精品国产三级国产aⅴ中文 | 亚洲精品免费在线播放| 在线视频国产一区| 日韩va欧美va亚洲va久久| 精品久久久久久久久久久院品网 | 奇米888四色在线精品| 欧美白人最猛性xxxxx69交| 从欧美一区二区三区| 亚洲一区二区三区中文字幕| 日韩一区二区麻豆国产| 成人午夜视频福利| 亚洲无人区一区| 精品国产123| 一本色道久久综合亚洲精品按摩| 丝袜脚交一区二区| 国产婷婷色一区二区三区| 在线视频一区二区三区| 另类欧美日韩国产在线| 国产精品久久一卡二卡| 欧美日韩高清影院| 成人午夜免费电影| 日本美女视频一区二区| 中文字幕一区二区三区在线不卡| 欧美久久一二区| 丁香婷婷深情五月亚洲| 五月天国产精品| 国产欧美精品日韩区二区麻豆天美| 91福利在线看| 国产一区二区不卡老阿姨| 亚洲一区二区三区四区五区中文 | 五月天精品一区二区三区| 国产偷v国产偷v亚洲高清| 欧美日韩在线播| 懂色av一区二区夜夜嗨| 免费在线成人网| 亚洲人吸女人奶水| 欧美精品一区二| 欧美日韩国产影片| 91网上在线视频| 国产精品538一区二区在线| 午夜影视日本亚洲欧洲精品| 国产精品美女视频| 精品国内片67194| 欧美网站一区二区| 成人h动漫精品| 国产一区二区视频在线播放| 性欧美疯狂xxxxbbbb| 亚洲欧美激情插| 中文字幕乱码日本亚洲一区二区 | 国产精品久久99| 精品免费99久久| 欧美精品久久久久久久久老牛影院 | 久久国产成人午夜av影院| 亚洲影视资源网| 亚洲高清免费视频| 中文字幕一区av| 久久久久国色av免费看影院| 欧美一级电影网站| 91福利在线导航| 91蜜桃视频在线| 91社区在线播放| 成人午夜激情在线| 国产传媒欧美日韩成人| 韩日av一区二区| 蜜桃久久久久久| 蜜桃视频第一区免费观看| 日本三级韩国三级欧美三级| 亚洲成在人线在线播放| 亚洲综合色婷婷| 亚洲精品成人a在线观看| 亚洲色图在线视频| 综合久久国产九一剧情麻豆| 国产精品久久久久aaaa樱花| 日本一区二区不卡视频|