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

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

?? bitmap.cpp

?? Vc.Net入門與提高源碼
?? CPP
字號(hào):
// Bitmap.cpp : Implementation of CBitmap
#include "stdafx.h"
#include "Picture.h"
#include "Pixels.h"
#include "Bitmap.h"
#include "Pixel.h"

// Standard windows 16 colors palette:
const RGBQUAD colorTable[16] =
{
    { 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x80, 0x00 },
    { 0x00, 0x80, 0x00, 0x00 },
    { 0x00, 0x80, 0x80, 0x00 },
    { 0x80, 0x00, 0x00, 0x00 },
    { 0x80, 0x00, 0x80, 0x00 },
    { 0x80, 0x80, 0x00, 0x00 },
    { 0x80, 0x80, 0x80, 0x00 },
    { 0xC0, 0xC0, 0xC0, 0x00 },
    { 0x00, 0x00, 0xFF, 0x00 },
    { 0x00, 0xFF, 0x00, 0x00 },
    { 0x00, 0xFF, 0xFF, 0x00 },
    { 0xFF, 0x00, 0x00, 0x00 },
    { 0xFF, 0x00, 0xFF, 0x00 },
    { 0xFF, 0xFF, 0x00, 0x00 },
    { 0xFF, 0xFF, 0xFF, 0x00 },
};

///////////////////////////////////////////////////////////////////
// CBitmap

STDMETHODIMP CBitmap::get_AutoSize(VARIANT_BOOL *pVal)
{
    *pVal = m_bAutoSize;
    return S_OK;
}

STDMETHODIMP CBitmap::put_AutoSize(VARIANT_BOOL newVal)
{
    m_bAutoSize = newVal;
    return S_OK;
}

STDMETHODIMP CBitmap::get_Width(long *pVal)
{
    *pVal = m_width;
    return S_OK;
}

STDMETHODIMP CBitmap::put_Width(long newVal)
{
    return UpdateSize(newVal, m_height);
}

STDMETHODIMP CBitmap::get_Height(long *pVal)
{
    *pVal = m_height;
    return S_OK;
}

STDMETHODIMP CBitmap::put_Height(long newVal)
{
    return UpdateSize(m_width, newVal);
}

HRESULT CBitmap::UpdateSize(long lWidth, long lHeight)
{
    // Set the m_bitmap pointer to a new size
    DWORD dwNewSize;                    // New array size

    // Keep a pointer on the old bitmap
    LPBYTE pOldBitmap = m_bitmap;

    // Calculate the new bitmap size
    dwNewSize = lHeight * CBROW(lWidth);

    // Allocate memory for the new bitmap
    if (NULL == (m_bitmap = (LPBYTE)CoTaskMemAlloc(dwNewSize)))
    {
        m_bitmap = pOldBitmap;
        return E_OUTOFMEMORY;
    }

    // Set the bitmap with a White background
    memset(m_bitmap, (White | (White << 4)), dwNewSize);

    // Update new width and length members
    long oldWidth = m_width;
    long oldHeight = m_height;
    m_width = lWidth;
    m_height = lHeight;

    // Calculate the number of bytes to copy for each line
    DWORD cbToCopy;
    if (oldWidth < m_width)
        cbToCopy = CBROW(oldWidth);
    else
        cbToCopy = CBROW(m_width);

    // Copy the part of the old bitmap part that could fit in the 
    // new one by copying it line by line
    LPBYTE lpOldRow = pOldBitmap, lpNewRow = m_bitmap;
    if (pOldBitmap != NULL)
    {
        for (int iRow = 0; iRow < oldHeight; iRow++)
        {
            // Did height growed or shrinked ?
            if (oldHeight < m_height)
            {
                if (iRow >= oldHeight) break;
            } else if (iRow >= m_height) break;

            // Copy the bitmap row from the old to the new bitmap
            CopyMemory(lpNewRow, lpOldRow, cbToCopy);

            // Go to next row
            lpOldRow += CBROW(oldWidth);
            lpNewRow += CBROW(lWidth);
        }

        // Free the old bitmap memory data
        CoTaskMemFree(pOldBitmap);
    }

    return (m_bitmap ? S_OK : E_OUTOFMEMORY);
}

STDMETHODIMP CBitmap::SetPoints(VARIANT vPoints)
{
    // Read a set of points defined in vPoints to apply them to 
    // the current picture
    if (!(vPoints.vt & VT_VARIANT) || 
        !(vPoints.vt & VT_BYREF)) return E_INVALIDARG;

    // Get the low and upper bound of the array
    HRESULT hr = S_OK;
    SAFEARRAY* pArray = *vPoints.pvarVal->pparray;
    LONG lBound, uBound;
    if (FAILED(SafeArrayGetLBound(pArray, 1, &lBound)) ||
        FAILED(SafeArrayGetUBound(pArray, 1, &uBound)))
            return E_INVALIDARG;

    // And set the point for each pixel of the array
    for (long iPixel = lBound; iPixel < uBound; iPixel++)
    {
        // Get the Pixel object
        VARIANT vPixel;
        SafeArrayGetElement(pArray, &iPixel, &vPixel);

        // Set the point by forwarding the object to SetPoint
        if (vPixel.vt == VT_DISPATCH || vPixel.vt == VT_UNKNOWN)
        {
            CComQIPtr<IPixel> pPixel = vPixel.pdispVal;
            if (pPixel.p && FAILED(hr = SetPoint(pPixel))) break;
        }
    }

    return hr;
}

STDMETHODIMP CBitmap::SetPoint(IPixel *pPixel)
{
    HRESULT hr = S_OK;
    long col, row;

    // Get pixel data
    pPixel->get_Row(&row);
    pPixel->get_Column(&col);

    // Use put_Pixel to set it
    return m_pPixels->put_Pixel(col, row, pPixel);
}

STDMETHODIMP CBitmap::SaveToStream(LPSTREAM pStm)
{
    // Get the size of the bitmap buffer (required for the bfSize
    // member of the bitmap file header
    CComPtr<IMalloc> pMalloc;
    CoGetMalloc(1, &pMalloc);
    DWORD cbBitmapData = pMalloc->GetSize(m_bitmap);

    // Set the bitmap fileheader to the stream
    BITMAPFILEHEADER bfh;
    bfh.bfType = *((WORD*)"BM");
    bfh.bfSize = sizeof(BITMAPFILEHEADER) + 
                 sizeof(BITMAPINFOHEADER) + 
                 sizeof(colorTable) + 
                 cbBitmapData;
    bfh.bfReserved1 = 0;
    bfh.bfReserved2 = 0;
    bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + 
                    sizeof(BITMAPINFOHEADER) + 
                    sizeof(colorTable);

    // Set the 16 colors bitmap info to the stream
    BITMAPINFOHEADER bih;
    bih.biSize = sizeof(BITMAPINFOHEADER);
    bih.biWidth = m_width;
    bih.biHeight = m_height;
    bih.biPlanes = 1;
    bih.biBitCount = 4;	// 16 colors bitmap (4 bits)
    bih.biCompression = 0;
    bih.biSizeImage = cbBitmapData;
    bih.biXPelsPerMeter = 0xE0C4;
    bih.biYPelsPerMeter = 0xE0C4;
    bih.biClrUsed = 0;
    bih.biClrImportant = 0;

    // Write now all the information into the stream
    HRESULT hr;
    hr = pStm->Write(&bfh, sizeof(BITMAPFILEHEADER), NULL);
    hr = pStm->Write(&bih, sizeof(BITMAPINFOHEADER), NULL);
    hr = pStm->Write(colorTable, sizeof(colorTable), NULL);
    hr = pStm->Write(m_bitmap, cbBitmapData, NULL);
    return hr;
}

STDMETHODIMP CBitmap::SaveToIIS4Response(VARIANT vResponse)
{
    CComVariant vDispResponse;
    if (SUCCEEDED(vDispResponse.ChangeType(VT_DISPATCH, &vResponse)))
    {
        // Get the pointer to IResponse
        CComQIPtr<IResponse> pResponse = vDispResponse.pdispVal;
        if (pResponse.p == NULL) return E_INVALIDARG;
        
        // Get the data to write to the ASP Response Object
        HRESULT hr;
        HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 0);
        CComPtr<IStream> pStm;
        if (FAILED(hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm)) ||
            FAILED(hr = SaveToStream(pStm))) return hr;

        // Set the data to in the SAFEARRAY format
        UINT cElements = GlobalSize(hGlobal);
        LPBYTE lpData = (LPBYTE)GlobalLock(hGlobal);

        // Create a single-dimension array (i.e. a vector)
        SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, 0, cElements);
        for (UINT iElement = 0; iElement < cElements; iElement++)
        {
            // Set each bytes of data in the safe array
            long idx = iElement;
            SafeArrayPutElement(pArray, &idx, ((LPBYTE)lpData) + iElement);
        }
        GlobalUnlock(hGlobal);
        
        // Write the data to the HTTP answer
        CComVariant vBytes;
        vBytes.vt = VT_ARRAY | VT_UI1;
        vBytes.parray = pArray;
        return pResponse->BinaryWrite(vBytes);
    } 
    else 
        return E_INVALIDARG;
}

STDMETHODIMP CBitmap::SaveToFile(VARIANT vbstrFileName, 
                                 VARIANT vhWndParentWindow)
{
    USES_CONVERSION;

    // Verify the handle to the window parent is present and valid
    HWND hWndParent = NULL;
    if (! (vhWndParentWindow.vt == VT_EMPTY || 
           (vhWndParentWindow.vt == VT_ERROR && 
            vhWndParentWindow.scode == DISP_E_PARAMNOTFOUND)) )
    {
        // Convert the Variant to VT_I4
        CComVariant vParent = vhWndParentWindow;
        if (FAILED(vParent.ChangeType(VT_I4)))
        return AtlReportError(CLSID_Bitmap, IDS_BAD_HWND, 
            IID_IBitmap, 0, _Module.GetModuleInstance());
    }

    // Should we display a dialog-box asking for the filename
    _TCHAR szFileName[MAX_PATH] = { 0 };
    if (vbstrFileName.vt == VT_EMPTY || 
        (vbstrFileName.vt == VT_ERROR && 
        vbstrFileName.scode == DISP_E_PARAMNOTFOUND))
    {
        // Use GetSaveFileName to show the dialog-box
        OPENFILENAME ofn = { 0 };
        ofn.lStructSize = sizeof(OPENFILENAME);
        ofn.hwndOwner = hWndParent;
        ofn.hInstance = _Module.GetModuleInstance();
        ofn.lpstrFilter = _T("Bitmap files\0*.BMP\0");
        ofn.nMaxFile = MAX_PATH;
        ofn.lpstrFile = szFileName;
        ofn.lpstrDefExt = _T(".BMP");
        if (!GetSaveFileName(&ofn)) 
            return S_OK;
    }
    else
    {
        // Assert it is a BSTR
        if (vbstrFileName.vt != VT_BSTR)
            return AtlReportError(CLSID_Bitmap, IDS_BAD_FILENAME, 
                IID_IBitmap, 0, _Module.GetModuleInstance());

        // Copy the filename passed in parameters
        lstrcpyn(szFileName, 
            W2T(vbstrFileName.bstrVal), 
            MAX_PATH - 1);
    }

    // Create a stream on a HGLOBAL and pass it to the save function
    HRESULT hr;
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 0);
    CComPtr<IStream> pStm;
    if (FAILED(hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm)) ||
        FAILED(hr = SaveToStream(pStm))) return hr;

    // Write now the stream to the specified file
    LPBYTE lpMem = (LPBYTE)GlobalLock(hGlobal);
    HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 
        FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD cbWritten;
    if (!WriteFile(hFile, lpMem, GlobalSize(hGlobal), &cbWritten, NULL))
    {
        return AtlReportError(CLSID_Bitmap, IDS_ERROR_SAVING, 
            IID_IBitmap, 0, _Module.GetModuleInstance());
    } else CloseHandle(hFile); 
    return hr;
}

STDMETHODIMP CBitmap::get_Pixels(IPixels **pVal)
{
    // Send our pixels object pointer
    return m_pPixels->QueryInterface(pVal);
}


HRESULT CBitmap::TestCoordinates(long x, long y)
{
    // Test if coordinates are valid or not
    if (x >= m_width || y >= m_height)
        return AtlReportError(CLSID_Bitmap, IDS_WRONG_COORDINATES,
            IID_IBitmap, 0, _Module.GetModuleInstance());
    else
        return S_OK;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区在线视频| 久久欧美中文字幕| 狠狠网亚洲精品| 一区二区三区高清在线| 久久久不卡影院| 欧美伦理影视网| 91蝌蚪porny九色| 国产一区二区三区日韩| 亚洲午夜激情网页| 亚洲人成影院在线观看| 国产亚洲精品资源在线26u| 91精品国产综合久久香蕉麻豆| 9i在线看片成人免费| 韩国三级电影一区二区| 日本色综合中文字幕| 亚洲国产一区二区视频| 亚洲视频资源在线| 国产精品久久久久久亚洲毛片| 精品少妇一区二区三区视频免付费 | 99久久精品免费| 国产一区二区看久久| 麻豆精品一区二区av白丝在线 | 国产精品夜夜爽| 蜜桃av一区二区三区| 亚洲va国产va欧美va观看| 一区二区在线观看免费| 亚洲欧洲美洲综合色网| 国产精品国产自产拍在线| 中文字幕av免费专区久久| 久久日韩精品一区二区五区| 日韩欧美高清在线| 日韩一区二区三区高清免费看看 | 91官网在线观看| 色香蕉成人二区免费| eeuss影院一区二区三区| www.色综合.com| 99re热视频精品| 99久久婷婷国产| 91毛片在线观看| 91视频在线观看| 色婷婷久久久综合中文字幕| 在线亚洲一区观看| 精品国产乱码久久久久久图片| 欧美日本精品一区二区三区| 欧美三级电影网站| 欧美一区二区视频免费观看| 欧美一区二区三区免费视频| 日韩精品一区二区三区视频播放 | 色噜噜狠狠色综合欧洲selulu| 99久久精品免费看| 欧美伊人久久久久久久久影院| 欧美制服丝袜第一页| 欧美日本一区二区在线观看| 欧美电视剧免费全集观看| 26uuuu精品一区二区| 久久精品夜色噜噜亚洲a∨| 国产精品成人一区二区艾草| 亚洲综合一二区| 奇米色777欧美一区二区| 久久99最新地址| 北条麻妃一区二区三区| 色婷婷精品久久二区二区蜜臀av| 欧美区一区二区三区| 日韩午夜三级在线| 久久精品一区二区三区不卡| 亚洲精品免费在线播放| 日本中文一区二区三区| 国产成人精品三级| 欧美最新大片在线看| 日韩欧美色综合| 成人欧美一区二区三区1314 | 亚洲欧美综合色| 视频一区二区三区在线| 国产精品1024| 91社区在线播放| 日韩三级在线观看| 中日韩免费视频中文字幕| 亚洲一区二区三区视频在线播放 | 欧美四级电影网| 久久久噜噜噜久噜久久综合| 一区二区在线看| 久草这里只有精品视频| 色综合久久九月婷婷色综合| 91精品国产一区二区人妖| 国产精品看片你懂得| 天堂av在线一区| 99re这里都是精品| 精品欧美乱码久久久久久1区2区| 自拍偷自拍亚洲精品播放| 久久99久久久久久久久久久| 91免费在线看| 国产欧美一区二区三区沐欲| 日韩专区欧美专区| 91原创在线视频| 久久久精品天堂| 无码av中文一区二区三区桃花岛| 成人性生交大片免费看中文网站| 欧美一区二区三区视频免费播放 | 国产一区二区不卡在线| 欧美亚洲综合网| 国产精品久久网站| 久久99精品久久只有精品| 欧美日韩激情在线| 综合在线观看色| 国产福利一区二区三区在线视频| 制服丝袜亚洲播放| 亚洲一区在线观看网站| 99久久久久久| 国产精品久久网站| 国产黑丝在线一区二区三区| 欧美一级黄色片| 亚洲成人av资源| 91成人免费电影| 亚洲欧美在线观看| 成人丝袜18视频在线观看| 久久只精品国产| 国模套图日韩精品一区二区| 欧美日韩国产精选| 亚洲国产aⅴ天堂久久| 91国产福利在线| 亚洲乱码国产乱码精品精可以看| 大美女一区二区三区| 国产欧美视频在线观看| 国产高清在线精品| 精品国产电影一区二区| 久久精品免费看| 日韩视频免费观看高清在线视频| 无吗不卡中文字幕| 欧美巨大另类极品videosbest | 国产精品国产精品国产专区不蜜 | 欧美一级欧美一级在线播放| 性感美女极品91精品| 欧美亚洲综合久久| 亚洲国产视频一区| 欧美性感一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美专区日韩专区| 亚洲美女视频在线| 色吧成人激情小说| 亚洲国产精品久久人人爱蜜臀| 在线视频你懂得一区二区三区| 亚洲精品中文在线| 欧美日韩高清一区二区| 天堂蜜桃91精品| 欧美成人vr18sexvr| 国产在线不卡视频| 欧美国产精品中文字幕| 99精品欧美一区二区三区综合在线| 亚洲图片欧美激情| 欧美另类久久久品| 国内外成人在线| 国产精品免费视频网站| 欧洲一区二区三区免费视频| 亚洲成人一区在线| 精品对白一区国产伦| 国产**成人网毛片九色 | 日韩一区二区在线免费观看| 麻豆视频一区二区| 国产色综合一区| 色婷婷av一区二区三区软件| 日韩有码一区二区三区| 久久久久久久久久久久久女国产乱 | 日韩不卡免费视频| 久久婷婷色综合| av激情成人网| 日日摸夜夜添夜夜添精品视频| 精品入口麻豆88视频| jizz一区二区| 日本中文一区二区三区| 中文字幕不卡的av| 7799精品视频| 国产99精品国产| 亚洲国产成人tv| 国产欧美一区二区精品性| 欧美午夜一区二区三区免费大片| 美女视频黄免费的久久| 亚洲少妇中出一区| 欧美v日韩v国产v| 91精品办公室少妇高潮对白| 美女在线一区二区| 亚洲丝袜精品丝袜在线| 欧美一级日韩不卡播放免费| 91在线精品一区二区三区| 免费高清成人在线| 亚洲免费av高清| 久久亚洲影视婷婷| 欧美欧美午夜aⅴ在线观看| av日韩在线网站| 激情丁香综合五月| 天天免费综合色| 国产精品久久久久影院| 日韩亚洲欧美成人一区| 在线观看视频欧美| 成熟亚洲日本毛茸茸凸凹| 免费在线成人网| 亚洲一区二区三区爽爽爽爽爽| 欧美激情中文不卡| 精品日韩欧美在线| 91精品国产91综合久久蜜臀| 色屁屁一区二区|