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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bitmaploaddoc.cpp

?? 本原碼主要介紹了如何在arm處理器上針對24位真彩位圖的處理的方法
?? CPP
字號:
// bitmaploadDoc.cpp : implementation of the CBitmaploadDoc class
//

#include "stdafx.h"
#include "bitmapload.h"

#include "bitmaploadDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBitmaploadDoc

IMPLEMENT_DYNCREATE(CBitmaploadDoc, CDocument)

BEGIN_MESSAGE_MAP(CBitmaploadDoc, CDocument)
	//{{AFX_MSG_MAP(CBitmaploadDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBitmaploadDoc construction/destruction

CBitmaploadDoc::CBitmaploadDoc()
{
	// TODO: add one-time construction code here
	pBitmapPixels = NULL;
	bm_width = -1;
	bm_height = -1;
}

CBitmaploadDoc::~CBitmaploadDoc()
{
	if (pBitmapPixels != NULL)
		delete [] pBitmapPixels;
	pBitmapPixels = NULL;

	bm_width = -1;
	bm_height = -1;
}

BOOL CBitmaploadDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	DeleteContents();

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CBitmaploadDoc serialization

void CBitmaploadDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CBitmaploadDoc diagnostics

#ifdef _DEBUG
void CBitmaploadDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CBitmaploadDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CBitmaploadDoc commands

void CBitmaploadDoc::DeleteContents() 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pBitmapPixels != NULL)
		delete [] pBitmapPixels;
	pBitmapPixels = NULL;

	bm_width = -1;
	bm_height = -1;

	CDocument::DeleteContents();
}

BOOL CBitmaploadDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
//	if (!CDocument::OnOpenDocument(lpszPathName))
//		return FALSE;
	
	// TODO: Add your specialized creation code here
	DeleteContents();
	LoadBitmap24(lpszPathName);
	if (pBitmapPixels == NULL)
		TRACE0("It is NULL\n");
	UpdateAllViews(NULL);

	return TRUE;
}

BOOL CBitmaploadDoc::LoadBitmap24(const char * fn)
{
    FILE * fp;
    BYTE r, g, b;
    BITMAPFILEHEADER bmFileHdr;
    BITMAPINFO bmInfo;
    int EndByte = 1;
    BOOL bDone = FALSE;
    WORD * temp;
	WORD * t2;

    // open file to read
    fp = fopen(fn, "rb");

    // read BITMAPFILEHEADER
    fread((char *)&bmFileHdr, sizeof(BITMAPFILEHEADER), 1, fp);

    // you read BITMAPINFOHEADER and RGBQUAD separately or together by
    // read them into
    // BITMAPINFO structure. When RGBQUAD is not empty (bitmap is 16 colors
    // or 256 colors)
    // You must read these two structures separately.
    fread((char *)&bmInfo, sizeof(BITMAPINFO), 1, fp);

    // check the bitmap info. If it is not 24 bit, and uncompressed,
    //and the colors used and are important is
    // not 0. return FALSE.
    if (bmInfo.bmiHeader.biBitCount != 24 ||
        bmInfo.bmiHeader.biCompression != 0 ||
        (bmInfo.bmiHeader.biClrUsed != 0 && bmInfo.bmiHeader.biClrImportant != 0))
    {
        fclose(fp);
		AfxMessageBox("This does nto appear to be a 24-bit uncompressed bitmap.");
        return FALSE;
    }

    // get the width and height of the bitmap.
    bm_width = (WORD)bmInfo.bmiHeader.biWidth;
    bm_height = (WORD)bmInfo.bmiHeader.biHeight;

	if (bm_width > 800 || bm_height > 600)
	{
        fclose(fp);
		AfxMessageBox("This bitmap is way to big. Bitmap shouldn't be larger than 800X600.");
        return FALSE;
	}

    // set new file pointer position at 54 from the begin of the
    //file. (0 to 53 are used to store
    // BITMAPFILEINFO, and BITMAPINFOHEADER.
    fseek(fp, bmFileHdr.bfOffBits, SEEK_SET);

    // start the mathematicall calculation for junk bytes.
    if ((bmInfo.bmiHeader.biSizeImage - bm_width * bm_height * 3) == 0)
    {
        EndByte = 0; // only when there is no junk bytes
    }
    else 
    {
        // find junk bytes.
        EndByte = (bmFileHdr.bfSize - 54 - bm_width * bm_height * 3) / bm_height; 
    }

    // create 2 empty arrays. One to store pixels from the file,
    // the other is used to invert the array.
    temp = new WORD[bm_width * bm_height];
    pBitmapPixels = new WORD[bm_width * bm_height];
    int count = bm_width * bm_height - 1;

    // read the pixels.
    while (!feof(fp))
    {
        // read scan line
        for (int i = 0; i < bm_width; i++)
        {
            // since the bitmap is inverted stored, color byte Blue is always
            // the first
            if (!feof(fp))
            {
                fread((BYTE *)&b, sizeof(BYTE), 1, fp);
            }
            else
            {
                // this is true only when the file is totally corrupted.
                bDone = TRUE;
                break;
            }
            // Then we read the Green byte.
            if (!feof(fp))
            {
                fread((BYTE *)&g, sizeof(BYTE), 1, fp);
            }
            else
            {
                // this is true only when the file is totally corrupted.
                bDone = TRUE;
                break;
            }
            // Finally the Red byte.
            if (!feof(fp))
            {
                fread((BYTE *)&r, sizeof(BYTE), 1, fp);
            }
            else
            {
                // this is true only when the file is totally corrupted.
                bDone = TRUE;
                break;
            }

            // convert 24 bit color (3 bytes for R, G, B) into 16 bit,
            //5-6-5 format WORD pixel.
            temp[count] =
              (WORD)((((WORD)r&0xf8)<<8)|(((WORD)g&0xfc)<<3)|(((WORD)b&0xf8)>>3));
            count--; // counter operation for pixel index.
        }

        // When the for loop is done, one scan line is completed.
        // This is where you skip the junk bytes. If you don't do
        // that, the end result will be distorted image.
        // Not good.
        if (!bDone)
        {
            fseek(fp, EndByte, SEEK_CUR);
        }
        else
        {
            break;
        }
    }

    // We do another inversion of the array.
    count = 0;
    for (int y = 0; y < bm_height; y++)
    {
        for (int x = bm_width - 1; x > -1; x--)
        {
            t2 = temp + y * bm_width + x;
            pBitmapPixels[count] = *t2;
            count++;
        }
    }
    delete [] temp; // when done, the old array is discarded.

    fclose(fp); // close file

    return TRUE; // return success.
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区的国产在线播放| 亚洲国产高清不卡| 91视频免费观看| 成人免费精品视频| 国产精品一二三四| 粉嫩aⅴ一区二区三区四区| 国内精品伊人久久久久av一坑| 蜜芽一区二区三区| 美女视频第一区二区三区免费观看网站| 亚洲国产精品精华液网站| 亚洲午夜精品17c| 午夜精品久久一牛影视| 免费国产亚洲视频| 久久 天天综合| 粉嫩嫩av羞羞动漫久久久| 99re这里都是精品| 欧美视频一区二区| 日韩欧美亚洲国产另类| 久久久久久久精| 亚洲三级小视频| 亚洲国产毛片aaaaa无费看| 免费成人av在线播放| 国产精品一二一区| 91香蕉视频在线| 555夜色666亚洲国产免| 精品国一区二区三区| 国产精品短视频| 亚洲成人黄色影院| 精东粉嫩av免费一区二区三区| 国产精品18久久久久久久久久久久| 成人一级黄色片| 欧美亚洲图片小说| 久久久久综合网| 亚洲国产精品久久久久秋霞影院 | youjizz久久| 欧美在线视频日韩| 精品福利一区二区三区免费视频| 亚洲图片另类小说| 日本中文字幕不卡| 99热精品一区二区| 日韩午夜在线观看视频| 国产精品久久久久久久久果冻传媒| 亚洲综合免费观看高清完整版 | 欧美tk丨vk视频| 国产精品麻豆久久久| 日韩综合在线视频| 色先锋久久av资源部| 久久综合国产精品| 午夜视频久久久久久| 成人av网址在线| 日韩午夜av一区| 一区二区三区视频在线看| 久久成人久久鬼色| 欧美在线免费播放| 国产精品久久久久9999吃药| 精品伊人久久久久7777人| 欧美无乱码久久久免费午夜一区| 国产午夜精品一区二区| 久久99日本精品| 69堂国产成人免费视频| 一区二区三区中文在线| 国产 欧美在线| 久久久国产午夜精品| 奇米888四色在线精品| 欧美性生活久久| 一个色综合av| 一本到不卡免费一区二区| 国产欧美日韩亚州综合| 精品亚洲国内自在自线福利| 3d成人动漫网站| 日韩二区三区四区| 5858s免费视频成人| 一区二区三区精品视频在线| 9l国产精品久久久久麻豆| 国产精品网站在线| 成人av电影在线观看| 国产精品每日更新在线播放网址| 国产精品一区二区久激情瑜伽| 欧美精品一区在线观看| 精彩视频一区二区三区| 精品粉嫩超白一线天av| 国产一区二区三区精品视频| 精品日韩99亚洲| 经典三级在线一区| 国产视频在线观看一区二区三区| 国产999精品久久久久久绿帽| 久久久久久久免费视频了| 国产激情一区二区三区四区 | 亚洲高清三级视频| 欧美伊人久久久久久午夜久久久久| 亚洲日本韩国一区| 欧美日韩国产成人在线91| 丝瓜av网站精品一区二区| 欧美一区二区三区啪啪| 九九热在线视频观看这里只有精品 | 午夜欧美一区二区三区在线播放| 欧美日韩dvd在线观看| 日韩黄色免费电影| 久久午夜老司机| 北岛玲一区二区三区四区| 一区二区视频在线看| 欧美日韩精品系列| 国产一区二区不卡| 亚洲女同一区二区| 欧美一区在线视频| 盗摄精品av一区二区三区| 日韩理论片在线| 777欧美精品| 成人的网站免费观看| 亚洲午夜视频在线观看| 精品久久免费看| 色偷偷一区二区三区| 美女网站一区二区| 国产精品久久久一本精品| 欧美精品少妇一区二区三区 | 久久久精品影视| 色88888久久久久久影院野外| 免费在线一区观看| 亚洲欧美电影院| 2014亚洲片线观看视频免费| 在线视频综合导航| 国v精品久久久网| 日本亚洲一区二区| 亚洲天堂中文字幕| 精品盗摄一区二区三区| 欧美中文一区二区三区| 国产成人鲁色资源国产91色综| 亚洲色图都市小说| 精品国产伦一区二区三区观看方式| 91免费视频观看| 国产九色精品成人porny| 亚洲国产wwwccc36天堂| 中文字幕亚洲一区二区va在线| 日韩一区二区麻豆国产| 日本久久电影网| 91亚洲大成网污www| 国产电影一区在线| 久久99精品久久久久婷婷| 午夜免费久久看| 一区二区高清免费观看影视大全| 欧美国产精品一区| 国产欧美日韩在线看| 久久一区二区三区国产精品| 欧美精品日韩精品| 欧美色精品在线视频| 欧美曰成人黄网| 欧美中文字幕一区| 在线观看不卡视频| 欧洲在线/亚洲| 色天使久久综合网天天| 97成人超碰视| 91丨porny丨国产入口| 99久久国产综合精品麻豆 | 国产精品视频麻豆| 久久美女艺术照精彩视频福利播放| 日韩欧美一级在线播放| 欧美一级免费大片| 91精品国产综合久久精品麻豆| 精品视频在线看| 67194成人在线观看| 日韩欧美三级在线| 日韩一区二区在线观看视频播放| 欧美一区二区视频网站| 欧美一级夜夜爽| 欧美成人艳星乳罩| 久久夜色精品一区| 国产精品每日更新在线播放网址 | 91免费看片在线观看| 在线视频国内一区二区| 欧美伊人久久大香线蕉综合69| 欧美日韩色一区| 欧美剧情片在线观看| 欧美电影免费观看高清完整版在 | 亚洲图片欧美视频| 免费人成在线不卡| 久久超碰97中文字幕| 国产成人高清视频| 色诱亚洲精品久久久久久| 欧美精品三级在线观看| 久久一夜天堂av一区二区三区| 国产精品欧美精品| 午夜亚洲福利老司机| 国产在线视频精品一区| 99精品国产视频| 日韩一区二区影院| 亚洲欧洲日产国码二区| 亚洲成人免费视| 国产精品一二三四五| 欧美最猛性xxxxx直播| 欧美r级电影在线观看| 中文字幕一区二区在线观看| 日韩国产在线一| 国产成人av电影| 欧美日韩不卡在线| 亚洲国产成人在线| 天堂在线一区二区| av一区二区不卡| 日韩一级黄色片| 一区二区日韩av| 国产精品1区2区3区|