位圖(BMP)文件結(jié)構(gòu)分析以及使用C++實(shí)現(xiàn)位圖的讀寫與顯示

1. 摘要

??BMP是英文Bitmap(位圖)的簡(jiǎn)寫鹏倘,它是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式,能夠被多種Windows應(yīng)用程序所支持。BMP圖像文件是Windows采用的圖形文件格式撮竿,在Windows環(huán)境下運(yùn)行的所有圖象處理軟件都支持BMP圖象文件格式吮便。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP為基礎(chǔ)的。

??本實(shí)驗(yàn)將會(huì)對(duì)BMP位圖的文件結(jié)構(gòu)進(jìn)行分析倚聚,并實(shí)現(xiàn)BMP位圖的讀取线衫、顯示和保存。

??關(guān)鍵詞:BMP位圖文件結(jié)構(gòu)分析惑折、BMP位圖的讀取授账、BMP位圖的保存、BMP位圖的顯示

2. 實(shí)驗(yàn)內(nèi)容與相關(guān)平臺(tái)

2.1 實(shí)驗(yàn)內(nèi)容

  • 對(duì)BMP位圖的文件結(jié)構(gòu)進(jìn)行分析

  • 編寫程序惨驶,實(shí)現(xiàn)對(duì)24位彩色位圖進(jìn)行讀取白热、顯示、保存操作

2.2 實(shí)驗(yàn)的相關(guān)平臺(tái)與工具

??Notepad++(用于分析BMP圖像的文件結(jié)構(gòu))粗卜、Vs code屋确、C++

3. BMP位圖文件結(jié)構(gòu)分析

??在本節(jié)中,我們將要對(duì)BMP位圖的文件結(jié)構(gòu)進(jìn)行分析续扔。在此之前攻臀,我們需要事先了解兩個(gè)關(guān)鍵點(diǎn):

  • 在BMP文件中,數(shù)據(jù)存儲(chǔ)采用小端方式(little endian)纱昧,即“低地址存放低位數(shù)據(jù)刨啸,高地址存放高位數(shù)據(jù)”。

  • 以下所有分析均以字節(jié)為單位進(jìn)行识脆。

3.1位圖的文件結(jié)構(gòu)

??位圖的文件結(jié)構(gòu)如表3-1所示设联,位圖的數(shù)據(jù)包括四項(xiàng),分別是:位圖文件頭灼捂、位圖信息頭离例、調(diào)色板和位圖數(shù)據(jù)

??表3-1 位圖的文件格式:

位圖文件頭BITMAPFILEHEADER
位圖信息頭BITMAPINFOHEADER
調(diào)色板Palette
位圖數(shù)據(jù)ImageData

3.2 位圖的文件頭分析

??位圖文件頭主要用于識(shí)別位圖文件悉稠,以及記錄文件的大小宫蛆、位圖數(shù)據(jù)位置等信息,共占14個(gè)字節(jié)偎球。圖3-2是位圖文件頭結(jié)構(gòu)的定義洒扎,位圖文件頭的字段含義如表3-3所示。

圖3-2

??表3-3 位圖頭文件的字段以及含義:

字段 字節(jié)數(shù) 含義
bfType 2 聲明位圖文件的類型衰絮,該值必須為0x4D42袍冷,即字符'BM'。表示這是Windows支持的位圖格式猫牡。 【注】該值也可以設(shè)置位’BA’,’CI’,’CP’等不同格式胡诗,但由于因?yàn)镺S/2系統(tǒng)并沒有被普及開。因此在編程時(shí),只需判斷第一個(gè)標(biāo)識(shí)為否為“BM”即可煌恢。
bfSize 4 聲明BMP文件的大小骇陈,單位是字節(jié)
bfReserved1 2 保留字段,必須設(shè)置為0
bfReserved2 2 保留字段瑰抵,必須設(shè)置為0
bfOffBits 4 聲明從文件頭開始到實(shí)際的圖象數(shù)據(jù)之間的字節(jié)的偏移量你雌,可以用這個(gè)偏移值迅速的從文件中讀取到位數(shù)據(jù)。

??用Notepad++打開BMP圖像文件“l(fā)ena-單色位.bmp”二汛,如下圖3-4所示婿崭。可見紅框1中肴颊,第1-2字節(jié)數(shù)據(jù)為0x4d42氓栈,為BMP位圖的固定標(biāo)識(shí)。在紅框2中婿着,第3-6字節(jié)數(shù)據(jù)為0x00008d8e授瘦,表示36238字節(jié),可見該值與在Window資源管理器中查看文件屬性中的圖片大小的是一致的竟宋。

??在紅框3中提完,此處的數(shù)據(jù)為0x0000003e,表示62字節(jié)丘侠,表示位圖數(shù)據(jù)位于從文件開始往后數(shù)的62字節(jié)處氯葬。

圖3-4

3.3 位圖的信息頭分析

??BITMAPINFO段由兩部分組成:BITMAPINFOHEADER結(jié)構(gòu)體和RGBQUAD結(jié)構(gòu)體,其中的BITMAPINFOHEADER結(jié)構(gòu)體表示位圖信息頭婉陷。同樣地,Windows為位圖信息頭定義了如下結(jié)構(gòu)體官研,如下圖3-5所示秽澳。位圖信息頭的字段含義如下表3-6所示。

圖3-5

??表3-6 位圖信息頭的字段以及含義:

字段 占字節(jié)數(shù) 含義
biSize 4 聲明BITMAPINFOHEADER占用的字節(jié)數(shù)
biWidth 4 聲明圖片的寬度戏羽,單位是像素
biHeight 4 聲明圖片的高度担神,單位是像素
biPlanes 2 聲明目標(biāo)設(shè)備說(shuō)明位面數(shù),其值將總是被設(shè)為1
biBitCount 2 聲明單位像素的位數(shù)始花,表示Bmp圖像的顏色位數(shù)妄讯,如24位圖,32位圖
biCompression 4 聲明圖像壓縮屬性酷宵,由于bmp圖片是不壓縮亥贸,該值等于0
biSizeImage 4 聲明Bmp圖像數(shù)據(jù)區(qū)的大小
biXPelsPerMeter 4 聲明圖像的水平分辨率
biYPelsPerMeter 4 聲明圖像的垂直分辨率
biClrUsed 4 聲明使用了顏色索引表的數(shù)量
biClrImportant 4 聲明重要的顏色的數(shù)量,等于0時(shí)表示所有顏色都很重要

??繼續(xù)用Notepad++分析BMP圖像的文件結(jié)構(gòu)浇垦,如下圖3-7所示炕置。可見紅框1所示的數(shù)據(jù)為biSize字段,它的值為0x00000028=40朴摊,表示位圖信息頭的大小為40字節(jié)。紅框2與3所示的數(shù)據(jù)表示圖像的寬度與高度甚纲,對(duì)應(yīng)的值為0x0000 021b = 539像素介杆,0x0000 0214 = 532像素鹃操。

??紅框4處表示圖像的位深度,因?yàn)檫@是一張黑白圖像这溅,所以位深度為1组民。

圖3-7

??若打開的是24位深度的圖片,可見該字段的值為0x0018悲靴,代表顏色深度為24臭胜,如下圖3-8所示。

圖3-8

??繼續(xù)分析文件癞尚,如下圖3-9所示耸三。紅框5處聲明了BMP圖像的數(shù)據(jù)區(qū)大小,即0x00008d50 = 36176字節(jié)浇揩。紅框6處定義了圖像的水平分辨率和垂直分辨率仪壮。

??紅框7處定義了使用彩色表的索引值的數(shù)量,當(dāng)該值為0時(shí)胳徽,表示使用所有調(diào)色板項(xiàng)积锅。

圖3-9

3.4 調(diào)色板分析

??調(diào)色板一般是針對(duì)16位以下的圖像設(shè)置的,對(duì)于16位及以上的BMP格式圖像养盗,其位圖像素?cái)?shù)據(jù)是直接對(duì)應(yīng)像素的RGB顏色值進(jìn)行描述缚陷,因此省去了調(diào)色板。對(duì)于16位以下的BMP格式圖像往核,其位圖像素?cái)?shù)據(jù)中記錄的是調(diào)色板的索引值箫爷。調(diào)色板的作用是,當(dāng)圖像的位深度值比較小時(shí)聂儒,通過(guò)調(diào)色板記錄所有的顏色值虎锚,而位圖數(shù)據(jù)則存儲(chǔ)調(diào)色板的索引項(xiàng),因此達(dá)到節(jié)省存儲(chǔ)空間的效果衩婚。

??調(diào)色板的數(shù)據(jù)由RGBQUAD結(jié)構(gòu)體項(xiàng)組成窜护,該結(jié)構(gòu)體由4個(gè)字節(jié)型數(shù)據(jù)組成,所以一個(gè)RGBQUAD結(jié)構(gòu)體只占用4字節(jié)空間非春,從左到右每個(gè)字節(jié)依次表示(藍(lán)色柄慰,綠色鳍悠,紅色,未使用)坐搔。調(diào)色板的結(jié)構(gòu)體定義如下圖3-10所示:

圖3-10

??分析圖像的第55-62個(gè)字節(jié)藏研,該處聲明的是圖像的彩色表項(xiàng),由于現(xiàn)在使用的圖像是單色圖概行,只有黑白兩種顏色蠢挡,所以調(diào)色板中也只有兩項(xiàng),對(duì)應(yīng)著黑色和白色凳忙。如下圖3-11所示业踏。

圖3-11

??接下來(lái),我們看一下位深度大于16位的BMP圖像的調(diào)色板涧卵。

??我們用Notepad++打開一張位深度為24的BMP圖像勤家,如下圖3-12所示。紅框1處為位圖文件頭的bfOffBits字段柳恐,值為54字節(jié)伐脖,表示從文件頭起始到位圖數(shù)據(jù)之間的字節(jié)的偏移量54字節(jié)。

??紅框2處的字段為位圖信息頭的biSize字段乐设,值為40字節(jié)讼庇。觀察兩組數(shù)據(jù)數(shù)據(jù),位圖的文件頭固定為14字節(jié)近尚,加上信息頭的40字節(jié)因此總字節(jié)數(shù)為54字節(jié)蠕啄,正等于bfOffBits字段的偏移量「甓停可以由此得知歼跟,24位位深度的BMP圖像沒有調(diào)色板數(shù)據(jù)。

圖3-12

1.3 位圖數(shù)據(jù)分析

??位圖數(shù)據(jù)記錄了位圖每一個(gè)像素的像素值格遭,存儲(chǔ)的順序是在掃描行內(nèi)是從左到右嘹承,掃描行之間是從下到上。根據(jù)不同的位圖如庭,位圖數(shù)據(jù)所占據(jù)的字節(jié)數(shù)也是不同的。比如撼港,對(duì)于24位的位圖坪它,每三個(gè)字節(jié)表示一個(gè)像素。對(duì)于本案例中的單色圖帝牡,一個(gè)字節(jié)則可以對(duì)應(yīng)八個(gè)像素點(diǎn)的像素值往毡。

??根據(jù)圖像提供的位圖數(shù)據(jù),可以得知每個(gè)像素點(diǎn)的值靶溜,以此繪制圖像开瞭。

??如下圖3-13所示懒震,位圖數(shù)據(jù)共有36176字節(jié),位圖文件頭與位圖信息頭共54字節(jié)嗤详,再加上彩色表的兩個(gè)索引項(xiàng)共8個(gè)字節(jié)个扰,可以得知該圖像共36238字節(jié)。此數(shù)據(jù)與用Window資源管理器直接查看圖像的大小一致葱色。

圖3-13

??在位圖數(shù)據(jù)存儲(chǔ)與讀取過(guò)程中递宅,有一點(diǎn)需要特別注意:BMP存儲(chǔ)格式要求每行的字節(jié)數(shù)必須是4的倍數(shù)。若某行的字節(jié)數(shù)不是4的倍數(shù)苍狰,需要額外添加字符‘0’湊夠到4的倍數(shù)办龄。在對(duì)位圖數(shù)據(jù)進(jìn)行讀寫時(shí),這一點(diǎn)需要特別留意淋昭,否則無(wú)法對(duì)位圖圖像進(jìn)行正確的讀寫俐填。

4. 使用C++實(shí)現(xiàn)對(duì)位圖文件的讀寫、顯示

??在本小節(jié)中,將會(huì)用C++語(yǔ)言實(shí)現(xiàn)對(duì)24位位圖文件的讀寫,顯示操作沪铭。

??本程序定義了一個(gè)新的結(jié)構(gòu)體ImgInfo悬秉,里面包含了位圖文件頭BITMAPFILEHEADER、位圖信息頭BITMAPINFOHEADER排嫌,還有一個(gè)二維數(shù)組imgData,用于存放像素值信息。如下圖4-1所示撩银,加入二維數(shù)組imgData字段的好處是可以使用二維數(shù)組更方便地對(duì)圖像的像素點(diǎn)進(jìn)行操作。

??在程序的主函數(shù)中豺憔,調(diào)用了readBitmap额获、showBitmap、saveBitmap三個(gè)函數(shù)恭应,實(shí)現(xiàn)對(duì)BMP圖像的讀取抄邀、顯示、保存操作昼榛,如圖4-2所示境肾。

圖4-1
圖4-2

4.1 位圖文件的讀取

??位圖文件讀取主要由程序中的readBitmap函數(shù)實(shí)現(xiàn),關(guān)鍵代碼如下圖4-3所示胆屿,通過(guò)使用fread函數(shù)實(shí)現(xiàn)對(duì)位圖文件頭與位圖信息頭的讀取奥喻。

圖4-3

??在下圖4-4中,通過(guò)fseek函數(shù)與位圖文件頭的bfOffBits字段非迹,對(duì)圖像像素?cái)?shù)據(jù)進(jìn)行定位环鲤,以此來(lái)讀取像素?cái)?shù)據(jù)信息,并存放到二維數(shù)組中憎兽。

??注意藍(lán)色框中的代碼冷离,由于BMP位圖采用4字節(jié)對(duì)齊的存儲(chǔ)機(jī)制吵冒,可能會(huì)存在一些無(wú)意義的填充數(shù)據(jù),因此我們?cè)谧x取數(shù)據(jù)時(shí)必須將他們排除西剥。

圖4-4

4.2在控制臺(tái)上顯示位圖圖像

??在控制臺(tái)上顯示位圖圖像痹栖,主要由程序中的showBitmap函數(shù)實(shí)現(xiàn)。

??根據(jù)結(jié)構(gòu)體ImgInfo中的imgData字段蔫耽,我們可以很輕易地獲取圖像的像素值信息结耀,并使用SetPixel函數(shù)將像素值顯示在控制臺(tái)特定的位置,這部分的關(guān)鍵代碼如下圖4-5所示匙铡。

??需要注意的是图甜,BMP位圖的像素?cái)?shù)據(jù)存儲(chǔ)方式是行內(nèi)從左到右,行間從下到上(即第一個(gè)數(shù)據(jù)存放的是圖像左下角的像素信息鳖眼,最后一個(gè)數(shù)據(jù)存放的是圖像右上角的像素信息)黑毅,因此在編程時(shí)需要考慮清楚像素點(diǎn)與其圖像實(shí)際的坐標(biāo)位置。

圖4-5

4.3 位圖文件的保存

??位圖文件的保存钦讳,主要在程序中的saveBitmap函數(shù)中實(shí)現(xiàn)矿瘦,如下圖4-6所示。與位圖文件的讀取類似愿卒,按照BMP位圖的文件結(jié)構(gòu)缚去,先使用fwrite函數(shù)實(shí)現(xiàn)對(duì)位圖文件頭和位圖信息頭的寫入,再遍歷像素點(diǎn)信息將像素值寫入文件中琼开。

??同樣地易结,位圖的像素信息存取采用4字節(jié)對(duì)齊的方式,在寫入每一行位圖數(shù)據(jù)后且字節(jié)長(zhǎng)度不足4的倍數(shù)時(shí)柜候,需要填充’0’字符搞动。

圖4-6

4.4實(shí)驗(yàn)效果

??如下圖4-7所示,在運(yùn)行程序后渣刷,將圖像數(shù)據(jù)讀出鹦肿,然后在控制臺(tái)上顯示圖像,最后將圖像保存到本地辅柴。

圖4-7

5.總結(jié)

  • 位圖的文件結(jié)構(gòu)包括四項(xiàng)箩溃,分別是:位圖文件頭、位圖信息頭碌嘀、調(diào)色板和位圖數(shù)據(jù)涣旨。

  • 位圖文件頭存放位圖文件的大小、位圖數(shù)據(jù)位置等信息筏餐。

  • 位圖信息圖存放位圖文件的寬高、圖像位深度牡拇、水平/垂直分辨率魁瞪、位圖數(shù)據(jù)大小等等關(guān)鍵信息穆律。

  • 調(diào)色板一般是針對(duì)16位以下的圖像設(shè)置的,對(duì)于16位及以上的BMP格式圖像导俘,其位圖像素?cái)?shù)據(jù)是直接對(duì)應(yīng)像素的RGB顏色值進(jìn)行描述峦耘。

  • 位圖數(shù)據(jù)記錄了位圖每一個(gè)像素的像素值,存儲(chǔ)的順序是在掃描行內(nèi)是從左到右旅薄,掃描行之間是從下到上辅髓,并要求每行的字節(jié)數(shù)必須是4的倍數(shù)。

6. 參考文章

[1] 百度百科--Bitmap位圖.https://baike.baidu.com/item/Bitmap/6493270?fr=aladdin

[2] Bitmap 圖片格式并用 C++ 讀寫 Bitmap.

https://blog.csdn.net/weixin_34208185/article/details/86257499

[3] BMP格式詳解.https://blog.csdn.net/gwwgle/article/details/4775396

[4] Bitmap每行4字節(jié)對(duì)齊.https://blog.csdn.net/a_flying_bird/article/details/50585146

7.附--完整代碼

// ImgOpt.cpp : 此文件包含 "main" 函數(shù)少梁。程序執(zhí)行將在此處開始并結(jié)束洛口。
//
#include <iostream>
#include <Windows.h>
#include <malloc.h>
#include <vector>

using namespace std;

string imgPath = "C:/Users/ZXX-PC/Desktop/lena-24位.bmp";
string saveImgPath = "C:/Users/ZXX-PC/Desktop/lena-24位-save.bmp";

//自定義了一個(gè)ImgInfo的結(jié)構(gòu)體,包含BMP文件頭凯沪、BMP信息頭和像素點(diǎn)的RGB值第焰。
//目前只支持24位圖像的讀取和顯示

typedef struct{
    BITMAPFILEHEADER bf;
    BITMAPINFOHEADER bi;
    vector<vector<char>> imgData;
}ImgInfo;

//根據(jù)圖片路徑讀取Bmp圖像,生成ImgInfo對(duì)象
ImgInfo readBitmap(string imgPath) {
    ImgInfo imgInfo;
    char* buf;                                              //定義文件讀取緩沖區(qū)
    char* p;

    FILE* fp;
    fopen_s(&fp, imgPath.c_str(), "rb");
    if (fp == NULL) {
        cout << "打開文件失敗!" << endl;
        exit(0);
    }

    fread(&imgInfo.bf, sizeof(BITMAPFILEHEADER), 1, fp);
    fread(&imgInfo.bi, sizeof(BITMAPINFOHEADER), 1, fp);

    if (imgInfo.bi.biBitCount != 24){
        cout << "不支持該格式的BMP位圖妨马!" << endl;
        exit(0);
    }

    fseek(fp, imgInfo.bf.bfOffBits, 0);

    buf = (char*)malloc(imgInfo.bi.biWidth * imgInfo.bi.biHeight * 3);
    fread(buf, 1, imgInfo.bi.biWidth * imgInfo.bi.biHeight * 3, fp);

    p = buf;

    vector<vector<char>> imgData;
    for (int y = 0; y < imgInfo.bi.biHeight; y++){
        for (int x = 0; x < imgInfo.bi.biWidth; x++) {
            vector<char> vRGB;

            vRGB.push_back(*(p++));     //blue
            vRGB.push_back(*(p++));     //green
            vRGB.push_back(*(p++));     //red

            if (x == imgInfo.bi.biWidth - 1)
            {
                for (int k = 0; k < imgInfo.bi.biWidth % 4; k++) p++;
            }
            imgData.push_back(vRGB);
        }
    }
    fclose(fp);
    imgInfo.imgData = imgData;
    return imgInfo;
}

void showBitmap(ImgInfo imgInfo) {
    HWND hWindow;                                                //窗口句柄
    HDC hDc;                                                     //繪圖設(shè)備環(huán)境句柄
    int yOffset = 150;                      
    hWindow = GetForegroundWindow();
    hDc = GetDC(hWindow);

    int posX, posY;
    for (int i = 0; i < imgInfo.imgData.size(); i++){
        char blue = imgInfo.imgData.at(i).at(0);
        char green = imgInfo.imgData.at(i).at(1);
        char red = imgInfo.imgData.at(i).at(2);

        posX = i % imgInfo.bi.biWidth;
        posY = imgInfo.bi.biHeight - i / imgInfo.bi.biWidth + yOffset;
        SetPixel(hDc, posX, posY, RGB(red, green, blue));
    }
}

void saveBitmap(ImgInfo imgInfo) {
    FILE* fpw;
    fopen_s(&fpw, saveImgPath.c_str(), "wb");
    fwrite(&imgInfo.bf, sizeof(BITMAPFILEHEADER), 1, fpw);  //寫入文件頭
    fwrite(&imgInfo.bi, sizeof(BITMAPINFOHEADER), 1, fpw);  //寫入文件頭信息

    int size = imgInfo.bi.biWidth * imgInfo.bi.biHeight;
    for (int i = 0; i < size; i++) {
        fwrite(&imgInfo.imgData.at(i).at(0), 1, 1, fpw);
        fwrite(&imgInfo.imgData.at(i).at(1), 1, 1, fpw);
        fwrite(&imgInfo.imgData.at(i).at(2), 1, 1, fpw);

        if (i % imgInfo.bi.biWidth == imgInfo.bi.biWidth - 1) {
            char ch = '0';
            for (int j = 0; j < imgInfo.bi.biWidth % 4; j++) {
                fwrite(&ch, 1, 1, fpw);
            }
        }
    }
    fclose(fpw);
    cout << "已保存圖像至: " + saveImgPath << endl;
}

int main() {
    ImgInfo imgInfo = readBitmap(imgPath);
    showBitmap(imgInfo);
    saveBitmap(imgInfo);
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挺举,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烘跺,更是在濱河造成了極大的恐慌湘纵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤淳,死亡現(xiàn)場(chǎng)離奇詭異梧喷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)娇钱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門伤柄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人文搂,你說(shuō)我怎么就攤上這事适刀。” “怎么了煤蹭?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵笔喉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我硝皂,道長(zhǎng)常挚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任稽物,我火速辦了婚禮奄毡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贝或。我一直安慰自己吼过,他們只是感情好锐秦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盗忱,像睡著了一般酱床。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趟佃,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天扇谣,我揣著相機(jī)與錄音,去河邊找鬼闲昭。 笑死罐寨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汤纸。 我是一名探鬼主播衩茸,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贮泞!你這毒婦竟也來(lái)了楞慈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啃擦,失蹤者是張志新(化名)和其女友劉穎囊蓝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體令蛉,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聚霜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了珠叔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝎宇。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祷安,靈堂內(nèi)的尸體忽然破棺而出姥芥,到底是詐尸還是另有隱情,我是刑警寧澤汇鞭,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布凉唐,位于F島的核電站,受9級(jí)特大地震影響霍骄,放射性物質(zhì)發(fā)生泄漏台囱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一读整、第九天 我趴在偏房一處隱蔽的房頂上張望簿训。 院中可真熱鬧,春花似錦、人聲如沸强品。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)择懂。三九已至,卻和暖如春另玖,著一層夾襖步出監(jiān)牢的瞬間困曙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工谦去, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慷丽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓鳄哭,卻偏偏與公主長(zhǎng)得像要糊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妆丘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353