• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            tqsheng

            go.....
            隨筆 - 366, 文章 - 18, 評(píng)論 - 101, 引用 - 0
            數(shù)據(jù)加載中……

            ppm圖像格式 bmp

            ppm圖像格式
            2010-07-29 22:19
            ppm是一種簡(jiǎn)單的圖像格式,僅包含格式、圖像寬高、bit數(shù)等信息和圖像數(shù)據(jù)。 
            圖像數(shù)據(jù)的保存格式可以用ASCII碼,也可用二進(jìn)制,下面只說(shuō)說(shuō)一種ppm格式中比較簡(jiǎn)單的一種:24位彩色、二進(jìn)制保存的圖像。
            文件頭+rgb數(shù)據(jù):
            P6\n
            width height\n
            255\n
            rgbrgb...
            其中P6表示ppm的這種格式;\n表示換行符;width和height表示圖像的寬高,用空格隔開(kāi);255表示每個(gè)顏色分量的最大值;rgb數(shù)據(jù)從上到下,從左到右排放。

            讀取ppm圖像:
            // read ppm image, rgb data store in *data
            void read_ppm(char* filename, unsigned char** data, int* w, int* h)
            {
            char header[20];
            FILE* pFile;

            pFile = fopen(filename, "rb");
            fgets(header, 20, pFile);// get "P6"
            fgets(header, 20, pFile);// get "width height"
            sscanf(header,"%d %d\n", w, h);

            *data = (unsigned char*) malloc((*w)*(*h)*3);

            // get "255"
            fgets(header, 20, pFile);

            // get rgb data
            fread(*data, (*w)*(*h)*3, 1, pFile);

            fclose(pFile);
            }

            寫(xiě)ppm圖像文件:
            // giving rgb data and image width and height, write a ppm image, 
            void write_ppm(char* filename, unsigned char* data, int w, int h)
            {
            FILE* pFile;
            char header[20];

            pFile = fopen(filename, "wb");

            // write "P6"
            fwrite("P6\n", 3, 1, pFile);

            // write "width height"
            sprintf(header, "%d %d\n", w, h);
            fwrite(header, strlen(header), 1, pFile);

            // writeh "255"
            fwrite("255\n", 4, 1, pFile);

            // write rgb data
            fwrite(data, w*h*3, 1, pFile);

            fclose(pFile);
            }

            //清理ppm數(shù)據(jù)
            // free ppm rgb data
            void free_ppmdata(unsigned char** data)
            {
            free(*data);
            *data = NULL;
            }

            使用舉例:
            int main(int argc, char* argv[])
            {
            unsigned char* data;
            int w, h;

            read_ppm("C:\\test.ppm", &data, &w, &h);
            printf("ppm size: %dx%d\n", w, h);

            write_ppm("C:\\test2.ppm", data, dw, dh);

            free_ppmdata(&data);

            printf("main() finished......\n");
            return 0;
            }
            可以驗(yàn)證test2.ppm跟test.ppm是完全一致的,可以用看圖軟件打開(kāi)。

            posted on 2013-11-28 17:27 tqsheng 閱讀(748) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久亚洲精品成人av无码网站| 久久人妻少妇嫩草AV蜜桃| 国产福利电影一区二区三区,免费久久久久久久精 | 香蕉久久av一区二区三区| 中文字幕热久久久久久久| 伊人久久大香线蕉av一区| 无码人妻少妇久久中文字幕蜜桃| 久久久久久午夜成人影院 | 国内精品欧美久久精品| 亚洲国产精品嫩草影院久久| 2020国产成人久久精品| 久久精品无码专区免费青青| 久久精品国产99久久丝袜| 久久婷婷成人综合色综合| 国产精品久久久久久久| 蜜臀久久99精品久久久久久| 少妇人妻88久久中文字幕| 国产精自产拍久久久久久蜜| 久久无码国产专区精品| 国产国产成人久久精品| 亚洲精品tv久久久久久久久| 精品久久国产一区二区三区香蕉 | 青青草国产成人久久91网| 性做久久久久久久久浪潮| 国产精品视频久久久| 久久久无码精品亚洲日韩蜜臀浪潮| A级毛片无码久久精品免费| 亚洲成色www久久网站夜月| 久久人人爽人人爽AV片| 亚洲国产精品久久久久婷婷老年| 国内精品综合久久久40p| 无码8090精品久久一区| 久久久久亚洲av毛片大| 777久久精品一区二区三区无码| 精品永久久福利一区二区| 久久天天躁狠狠躁夜夜avapp| 国产日韩久久久精品影院首页| 国产精品美女久久久久| 久久天天躁狠狠躁夜夜96流白浆| 久久久久av无码免费网| 欧美日韩久久中文字幕|