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

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

?? jdib.cpp

?? 將 24Bit BMP 圖形轉為 TXT 格式
?? CPP
字號:
//*****************************************************************************
//
// JDib.cpp
//
//=============================================================================
//
// Copyright:	
//
// Author:      老魏
//
// Date:        1999.04.06
//
// Description: CJDib 類實現文件
//
// Side Effects:
//
// Class:
//
// Function:
//
// Notes:
//
// Update:
//
// Date     Name     Description
//
// ======== ===================================================================
// Known restrictions:
//
// Known bugs:
//
//*****************************************************************************
#include "stdafx.h"
#include "JDib.h"

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

/////////////////////////////////////////////////////////////////////////////
// CJDib

//**************************************************************
// Name:        CJDib()
//
// Author:      老魏
//
// Date:        1999.04.06
//
// Description: 構造函數, 初始化成員變量
//
// Arguments:   無
//
// Return:      無
//
// Side Effects: no
//               
// Notes:       
//
// Known restrictions:  
//
// Err NO. Date     Name         Description
//
// Update:
// Date     Name         Description
// ======== ============ =============================
//
//****************************************************
CJDib::CJDib()
{
    m_bSetPalette = TRUE;
    m_lpBMFileHeader = NULL;
    m_lpBMInfoHeader = NULL;
    m_lpLogPalette = NULL;
    m_nBytesPerLine = 0;
    m_pData = NULL;
    m_pFileBuffer = NULL;
}

//**************************************************************
// Name:        ~CJDib()
//
// Author:      老魏
//
// Date:        1999.04.06
//
// Description: 析構函數, 釋放不為空的數據和調色盤內存空間
//
// Arguments:   無
//
// Return:      無
//
// Side Effects: no
//               
// Notes:       
//
// Known restrictions:  
//
// Err NO. Date     Name         Description
//
// Update:
// Date     Name         Description
// ======== ============ =============================
//
//****************************************************
CJDib::~CJDib()
{
    if (m_lpLogPalette)
    {
        LocalFree(m_lpLogPalette);
    }

    if (m_pFileBuffer)
    {
        LocalFree(m_pFileBuffer);
    }
}

//**************************************************************
// Name:        Read(CString strBMPName)
//
// Author:      老魏
//
// Date:        1999.04.06
//
// Description: 讀取 BMP文件數據, 各種指針賦值和計算邏輯調色盤
//              不支持 JPEG 或 PNG格式
//
// Arguments:
//              CString strBMPName: BMP文件名
//
// Return:      
//              TRUE: 成功
//              FALSE: 失敗
//
// Side Effects: no
//               
// Notes:       
//
// Known restrictions:  
//
// Err NO. Date     Name         Description
//
// Update:
// Date     Name         Description
// ======== ============ =============================
//
//****************************************************
BOOL CJDib::Read(CString strBMPName)
{
    CFile File;
    //按只讀方式打開文件
    BOOL bResult = File.Open(strBMPName, CFile::modeRead);
	if (!bResult)
	{
		CString strErrorMessage;
		strErrorMessage = "打開文件:" + strBMPName + "失敗 !";
		AfxMessageBox(strErrorMessage);
		return FALSE;
	}

    //取得文件長度
    int nFileLength = File.GetLength();

    //按文件長度申請空間
    m_pFileBuffer = (char *)LocalAlloc(LPTR, nFileLength);
    if (!m_pFileBuffer)
    {
		AfxMessageBox("申請必須的內存空間失敗 !");
        return FALSE;
    }

    //讀取文件所有數據
    int nBytesRead = File.Read(m_pFileBuffer, nFileLength);
    if (nBytesRead != nFileLength)
    {
		AfxMessageBox("讀取文件內容失敗 !");
        return FALSE;
    }

    //文件頭指針賦值
    m_lpBMFileHeader = (LPBITMAPFILEHEADER)m_pFileBuffer;

    //判斷文件類型
    if (m_lpBMFileHeader->bfType != 0x4d42) // 'BM'
    {
		CString strErrorMessage;
		strErrorMessage = "文件:" + strBMPName + "不是有效的 BMP文件 !";
		AfxMessageBox(strErrorMessage);
        return FALSE;
    }

    //信息頭指針賦值
    m_lpBMInfoHeader = (LPBITMAPINFOHEADER)(m_pFileBuffer + sizeof(BITMAPFILEHEADER));
    
    //計算每行占用的字節數 (m_lpBMInfoHeader的biSizeImage成員有時為空不可用)
    //m_nBytesPerLine = m_lpBMInfoHeader->biSizeImage / m_lpBMInfoHeader->biHeight;
    m_nBytesPerLine = m_lpBMInfoHeader->biWidth * m_lpBMInfoHeader->biBitCount / 8;
    if (m_nBytesPerLine % 4 != 0)
        m_nBytesPerLine = (m_nBytesPerLine / 4 + 1) * 4;

    //數據指針賦值
    m_pData = m_pFileBuffer + m_lpBMFileHeader->bfOffBits;

    //為調色盤申請空間
    m_lpLogPalette = (LPLOGPALETTE)LocalAlloc(LPTR, sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY));
    m_lpLogPalette->palVersion = 0x300;

    //判斷是否需使用調色盤
    switch (m_lpBMInfoHeader->biBitCount)
    {
    case 0: //JPEG 或 PNG 格式
        m_bSetPalette = FALSE;
        break;
        
    case 1:
        m_lpLogPalette->palNumEntries = 2;
        m_bSetPalette = TRUE;
        break;
        
    case 4:
        m_lpLogPalette->palNumEntries = 16;
        m_bSetPalette = TRUE;
        break;
        
    case 8:
        m_lpLogPalette->palNumEntries = 256;
        m_bSetPalette = TRUE;
        break;
        
    case 16:
    case 24:
    case 32:
        m_bSetPalette = FALSE;
        break;
        
    default:
		AfxMessageBox("文件色彩數不可識別 !");
        return FALSE;
    }
        
    //申請臨時空間以處理調色盤
    char *pPalette = m_pFileBuffer + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    if (!pPalette)
	{
		AfxMessageBox("申請必須的內存空間失敗 !");
        return FALSE;
	}
        
    RGBQUAD rgbQuad[256];
    //調色盤賦值
    memcpy(rgbQuad, pPalette, sizeof(PALETTEENTRY) * m_lpLogPalette->palNumEntries);
    for (int i = 0; i < m_lpLogPalette->palNumEntries; i ++)
    {                                               
        m_lpLogPalette->palPalEntry[i].peBlue = rgbQuad[i].rgbBlue;
        m_lpLogPalette->palPalEntry[i].peGreen = rgbQuad[i].rgbGreen;
        m_lpLogPalette->palPalEntry[i].peRed = rgbQuad[i].rgbRed;
        m_lpLogPalette->palPalEntry[i].peFlags = rgbQuad[i].rgbReserved;
    }

    return TRUE;
}

//**************************************************************
// Name:        ConvertToText(CString strBMPName)
//
// Author:      老魏
//
// Date:        1999.04.06
//
// Description: 將給定 BMP文件轉換為文本文件, 僅支持 256色格式和真彩格式
//
// Arguments:
//              CString strBMPName: BMP文件名
//
// Return:
//              TRUE: 成功
//              FALSE: 失敗
//
// Side Effects: no
//               
// Notes:       
//
// Known restrictions:  
//
// Err NO. Date     Name         Description
//
// Update:
// Date     Name         Description
// ======== ============ =============================
//
//****************************************************
BOOL CJDib::ConvertToText(CString strBMPName)
{
    //字符調色盤
    BYTE CharPalette[16];
    CharPalette[0] = '#';
    CharPalette[1] = 'M';
    CharPalette[2] = '@';
    CharPalette[3] = 'H';
    CharPalette[4] = 'X';
    CharPalette[5] = '$';
    CharPalette[6] = '%';
    CharPalette[7] = '+';
    CharPalette[8] = '/';
    CharPalette[9] = ';';
    CharPalette[10] = ':';
    CharPalette[11] = '=';
    CharPalette[12] = '-';
    CharPalette[13] = ',';
    CharPalette[14] = '.';
    CharPalette[15] = ' ';
    
    CString strTxtName = strBMPName;
    //計算文本文件名
    strTxtName = strTxtName.Left(strTxtName.Find('.'));
    strTxtName += ".txt";

    CStdioFile TxtFile;
    //創建文本文件
    if (!TxtFile.Open(strTxtName, CFile::modeCreate | CFile::modeWrite | CFile::typeText))
    {
		CString strErrorMessage;
		strErrorMessage = "創建文本文件:" + strTxtName + "失敗 !";
		AfxMessageBox(strErrorMessage);
        return FALSE;
    }

    //讀取 BMP文件數據
    if (!Read(strBMPName))
    {
        return FALSE;
    }

    TxtFile.WriteString("Generated by 老魏!\n");

    //取得 BMP數據指針
    BYTE *pData = (BYTE *)m_pData;
    BYTE *pLine = pData;

    for (int i = m_lpBMInfoHeader->biHeight - 1; i >= 0; i--)
    {
        //計算每行的數據指針
        pLine = pData + i * m_nBytesPerLine;
        CString strLineText;
        for (int j = 0; j < m_lpBMInfoHeader->biWidth; j++)
        {
            int nRed, nGreen, nBlue, nValue;

            //計算當前象素的 RGB三分量的值
            switch (m_lpBMInfoHeader->biBitCount)
            {
            case 24:
                nRed = *pLine++;
                nGreen = *pLine++;
                nBlue = *pLine++;
                break;

            case 8:
                nRed = m_lpLogPalette->palPalEntry[*pLine].peRed;
                nGreen = m_lpLogPalette->palPalEntry[*pLine].peGreen;
                nBlue = m_lpLogPalette->palPalEntry[*pLine].peBlue;
                pLine++;
                break;

            default:
				AfxMessageBox("抱歉, 當前版本僅支持 8bit和24bit文件 !");
                return FALSE;
            }

            //計算灰度值
            nValue = (nRed * 30 + nGreen * 59 + nBlue * 11) / 100;

            //轉換到文本
            strLineText += CharPalette[nValue / 16];
        }

        //寫入文本文件
        TxtFile.WriteString(strLineText);
        TxtFile.WriteString("\n");
    }

    TxtFile.Close();

    return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区| 日韩精品一二三区| 国产盗摄一区二区三区| 2021久久国产精品不只是精品| 久久精品国产网站| 久久久久久夜精品精品免费| 成人国产在线观看| 一区二区三区资源| 欧美精品vⅰdeose4hd| 麻豆精品在线看| 久久亚洲一区二区三区四区| 波多野结衣中文字幕一区 | 日韩三级在线免费观看| 久久97超碰国产精品超碰| 久久久青草青青国产亚洲免观| 国产成人av资源| 亚洲欧美二区三区| 337p亚洲精品色噜噜狠狠| 国产一区二区在线影院| 亚洲同性同志一二三专区| 欧美日韩视频在线第一区| 看国产成人h片视频| 精品国产凹凸成av人导航| 成人午夜视频在线观看| 亚洲黄色免费电影| 欧美蜜桃一区二区三区| 精东粉嫩av免费一区二区三区| 国产精品久久久久一区二区三区| 欧美在线色视频| 久久99国产精品久久| 亚洲欧美怡红院| 日韩欧美成人一区二区| 99精品欧美一区二区蜜桃免费| 免费看精品久久片| 亚洲情趣在线观看| 精品成人佐山爱一区二区| 色呦呦国产精品| 国精产品一区一区三区mba视频 | 欧美精品一区二区久久久| 99精品热视频| 寂寞少妇一区二区三区| 一区二区在线观看免费视频播放| 精品欧美乱码久久久久久| 色狠狠色噜噜噜综合网| 精品在线一区二区| 欧美性猛交xxxx乱大交退制版| 国产呦精品一区二区三区网站| 夜夜精品视频一区二区| 久久影音资源网| 日韩色视频在线观看| 欧美中文字幕一区二区三区亚洲| 国产精品乡下勾搭老头1| 色综合天天视频在线观看| 久久99久国产精品黄毛片色诱| 亚洲伦在线观看| 日本一区二区三区四区 | 蜜桃av一区二区| 亚洲一区二区三区四区五区中文 | 亚洲精品国产无天堂网2021| 国产三区在线成人av| 69av一区二区三区| 欧美在线三级电影| 91久久线看在观草草青青| 成人av网在线| 成人av在线资源| 成人综合婷婷国产精品久久| 国产一区二区三区四区在线观看| 日韩精品免费专区| 午夜在线电影亚洲一区| 一区二区在线观看不卡| 亚洲蜜臀av乱码久久精品| 日本一区二区三区国色天香 | 欧美日韩在线直播| 色综合久久久久综合99| 成人av在线资源网| 91影院在线免费观看| 99精品视频在线播放观看| 99久久精品国产网站| 不卡一区二区中文字幕| 成人h动漫精品一区二区| 成人97人人超碰人人99| 成人av在线网| 色www精品视频在线观看| 在线观看日产精品| 欧美体内she精视频| 欧美日本韩国一区| 欧美一区二区三区性视频| 欧美一区二区精品| 精品国产百合女同互慰| 亚洲国产精品二十页| 亚洲天堂免费看| 亚洲国产aⅴ成人精品无吗| 日韩av在线播放中文字幕| 另类调教123区 | 99精品久久只有精品| 日本大香伊一区二区三区| 国产精品的网站| 亚洲黄色免费电影| 日韩av中文字幕一区二区三区| 久久超碰97中文字幕| 国产成人精品影视| 日本乱人伦aⅴ精品| 欧美日韩国产一级| 精品国产制服丝袜高跟| 中文文精品字幕一区二区| 亚洲三级免费观看| 琪琪久久久久日韩精品| 国产一区欧美日韩| 91久久精品一区二区| 日韩一区二区三区视频在线观看| 26uuuu精品一区二区| 亚洲视频在线一区观看| 亚洲v日本v欧美v久久精品| 激情久久五月天| 91麻豆.com| 日韩精品专区在线影院观看| 国产精品传媒在线| 美女一区二区三区| 91色porny蝌蚪| 欧美成人女星排名| 亚洲日本在线看| 青青草91视频| 色婷婷综合久久久中文一区二区 | 97精品国产露脸对白| 7777精品久久久大香线蕉| 国产免费成人在线视频| 日韩国产精品久久久久久亚洲| 国产黄色91视频| 欧美一级久久久久久久大片| 国产精品卡一卡二| 极品少妇一区二区三区精品视频 | 日韩高清欧美激情| 91在线你懂得| 精品久久久久一区| 亚洲成av人影院| jizz一区二区| 久久综合九色综合久久久精品综合| 亚洲丝袜精品丝袜在线| 国产美女主播视频一区| 欧美日韩国产乱码电影| 国产精品电影一区二区| 国产在线精品一区二区夜色| 欧美乱妇一区二区三区不卡视频| 1024精品合集| 国产一区在线观看麻豆| 日韩三级电影网址| 午夜国产精品一区| 91国内精品野花午夜精品| 国产精品久久久久四虎| 紧缚捆绑精品一区二区| 日韩午夜小视频| 日韩精品1区2区3区| 欧美日韩精品免费观看视频| 亚洲免费av在线| 色美美综合视频| 亚洲激情网站免费观看| 日本道色综合久久| 一区二区三区小说| 色综合久久99| 亚洲午夜免费视频| 在线观看国产日韩| 夜夜嗨av一区二区三区网页| 91香蕉视频黄| 一区二区在线看| 色婷婷国产精品| 亚洲成人免费视| 欧美日韩一区三区| 一区二区日韩av| 欧美日韩国产一级| 蜜桃av一区二区| 精品福利二区三区| 国产成人综合亚洲网站| 国产精品女上位| 99re成人在线| 一区二区激情小说| 色久综合一二码| 国产精品成人免费在线| 色狠狠综合天天综合综合| 亚洲伦理在线精品| 波多野结衣视频一区| 51午夜精品国产| 亚洲国产裸拍裸体视频在线观看乱了| 黄网站免费久久| 中文在线免费一区三区高中清不卡 | 成人午夜碰碰视频| 国产肉丝袜一区二区| 国内精品久久久久影院薰衣草| 久久综合九色综合欧美亚洲| 精品一区二区三区久久久| 欧美一区二区精品久久911| 日本网站在线观看一区二区三区| 337p日本欧洲亚洲大胆精品 | 久久久久久**毛片大全| 精品影视av免费| 久久精品视频一区二区三区| 99精品视频免费在线观看| 亚洲黄色片在线观看| 在线观看一区二区精品视频| 日本成人在线一区| 精品国产一区二区亚洲人成毛片 |