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

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

?? winimage.cpp

?? smartphone 監聽電源狀態源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

// ****************************************************************************
//
// WINIMAGE.CPP : Generic classes for raster images (MSWindows specialization)
//
//  Content: Member definitions for:
//  - class C_Image             : Storage class for single images
//  - class C_ImageSet          : Storage class for sets of images
//  - class C_AnimationWindow   : Window Class to display animations
//
//  (Includes routines to Load and Save BMP files and to load GIF files into
// these classes).
//
//  --------------------------------------------------------------------------
//
// Copyright ?2000, Juan Soulie <jsoulie@cplusplus.com>
//
// Permission to use, copy, modify, distribute and sell this software or any
// part thereof and/or its documentation for any purpose is granted without fee
// provided that the above copyright notice and this permission notice appear
// in all copies.
//
// This software is provided "as is" without express or implied warranty of
// any kind. The author shall have no liability with respect to the
// infringement of copyrights or patents that any modification to the content
// of this file or this file itself may incur.
//
// ****************************************************************************

#include "stdafx.h"
#include <windows.h>
#include <fstream>
#include "winimage.h"

using namespace std;

// Error processing macro (NO-OP by default):
#define ERRORMSG(PARAM) {}

// ****************************************************************************
// * C_Image Member definitions                                               *
// ****************************************************************************

C_ImageSet::~C_ImageSet(){
		for (int n=0;n<nImages;n++) delete img[n]; delete[] img;
}
void C_ImageSet::Reset()
{
	for (int n=0;n<nImages;n++)
		delete img[n];
	delete[] img;
	img=0;
	nImages=0;
	nLoops=0;
}

// Init: Allocates space for raster and palette in GDI-compatible structures.
void C_Image::Init(int iWidth, int iHeight, int iBPP) {
	if (Raster) {delete[]Raster;Raster=0;}
	if (pbmi) {delete[]pbmi;pbmi=0;}
	// Standard members setup
	Transparent=-1;
	BytesPerRow = Width = iWidth; Height=iHeight; BPP=iBPP;
	// Animation Extra members setup:
	xPos=xPos=Delay=0;

	if (BPP==24)
		{BytesPerRow*=3; pbmi=(BITMAPINFO*)new char [sizeof(BITMAPINFO)];}
	else
	{
		pbmi=(BITMAPINFO*)
			new char[sizeof(BITMAPINFOHEADER)+(1<<BPP)*sizeof(COLOR)];
		Palette=(COLOR*)((char*)pbmi+sizeof(BITMAPINFOHEADER));
	}

	BytesPerRow += (ALIGN-Width%ALIGN) % ALIGN;	// Align BytesPerRow
	
	Raster = new char [BytesPerRow*Height];

	pbmi->bmiHeader.biSize=sizeof (BITMAPINFOHEADER);
	pbmi->bmiHeader.biWidth=Width;
	pbmi->bmiHeader.biHeight=-Height;			// negative means up-to-bottom 
	pbmi->bmiHeader.biPlanes=1;
	pbmi->bmiHeader.biBitCount=(BPP<8?8:BPP);	// Our raster is byte-aligned
	pbmi->bmiHeader.biCompression=BI_RGB;
	pbmi->bmiHeader.biSizeImage=0;
	pbmi->bmiHeader.biXPelsPerMeter=11811;
	pbmi->bmiHeader.biYPelsPerMeter=11811;
	pbmi->bmiHeader.biClrUsed=0;
	pbmi->bmiHeader.biClrImportant=0;
}

// GDIPaint: Paint the raster image onto a DC
int C_Image::GDIPaint (HDC hdc,int x, int y,int iWidth,int iHeight)
{
	return SetDIBitsToDevice (hdc,x,y,iWidth,iHeight,0,0,
								0,Height,(LPVOID)Raster,pbmi,0);
}

// operator=: copies an object's content to another
C_Image& C_Image::operator = (C_Image& rhs)
	{
		Init(rhs.Width,rhs.Height,rhs.BPP);	// respects virtualization
		memcpy (Raster,rhs.Raster,BytesPerRow*Height);
		memcpy ((char*)Palette,(char*)rhs.Palette,(1<<BPP)*sizeof(*Palette));
		return *this;
	}



// ****************************************************************************
// * C_ImageSet Member definitions                                            *
// ****************************************************************************

// AddImage: Adds an image object to the back of the img vector.
void C_ImageSet::AddImage (C_Image* newimage)
{
	C_Image ** pTempImg = new C_Image* [nImages+1];
	int n = 0;
	for (n=0;n<nImages;n++) pTempImg[n]=img[n];	// (pointer copy)
	delete[] img;
	img=pTempImg;
	img[n]=newimage;
	nImages++;
}

// ****************************************************************************
// * FILE FORMAT SUPPORT ROUTINES                                             *
// ****************************************************************************

// ****************************************************************************
// * LoadBMP                                                                  *
// *   Load a BMP File into the C_Image object                                *
// *                        (c) Sept2000, Juan Soulie <jsoulie@cplusplus.com> *
// ****************************************************************************
int C_Image::LoadBMP (char* szFileName)
{
	int n;

	// Open file.
	ifstream bmpfile (szFileName , ios::in | ios::binary | ios::_Nocreate);
	if (! bmpfile.is_open()) { ERRORMSG("File not found"); return 0; }

	// *1* LOAD BITMAP FILE HEADER
	struct BITMAPFILEHEADER {
		unsigned short	bfType; 
		unsigned long	bfSize; 
		unsigned short	bfReserved1; 
		unsigned short	bfReserved2; 
		unsigned long	bfOffBits; 
	} bmfh;
	bmpfile.read ((char*)&bmfh,sizeof (bmfh));

	// Check filetype signature
	if (bmfh.bfType!='MB') { ERRORMSG("Not a valid BMP File"); return 0; }

	// *2* LOAD BITMAP INFO HEADER
	struct BITMAPINFOHEADER {
		unsigned long  biSize;
		         long  biWidth;
		         long  biHeight;
		unsigned short biPlanes;
		unsigned short biBitCount;
		unsigned long  biCompression;
		unsigned long  biSizeImage;
		         long  biXPelsPerMeter;
		         long  biYPelsPerMeter;
		unsigned long  biClrUsed;
		unsigned long  biClrImportant;
	} bmih;
	bmpfile.read ((char*)&bmih,sizeof (bmih));

	// Check for supported Color depths
	if ((bmih.biBitCount!=1) &&
		(bmih.biBitCount!=4) &&
		(bmih.biBitCount!=8) &&
		(bmih.biBitCount!=24))
		{ ERRORMSG("Color depth not supported"); return 0; }

	// Check if file is compressed
	if (bmih.biCompression!=0) 
		{ ERRORMSG("File uses unsupported compression"); return 0; }

	// Set: Allocate memory to contain Data
	Init (bmih.biWidth,
		(bmih.biHeight>0) ? bmih.biHeight: -bmih.biHeight,	// abs
		bmih.biBitCount);

	// *3* IF BPP AREN'T 24, LOAD PALETTE.
	if (BPP!=24)
	{
		for (n=0;n< 1<<BPP;n++)
		{
			Palette[n].b=bmpfile.get();
			Palette[n].g=bmpfile.get();
			Palette[n].r=bmpfile.get();
			bmpfile.get();	// 4th byte of RGBQUAD discarded
		}
	}

	// *4* LOAD RASTER DATA

	// Seek Raster Data in file
	bmpfile.seekg (bmfh.bfOffBits,ios::beg);

	int PixelsPerByte = 8/BPP;	//used only if BPP are less than 8
	int BitMask = (1<<BPP)-1;	//used only if BPP are less than 8

	// Raster Data Rows are 32bit aligned in BMP files.
	int RowAlignmentInFile = ((4- ((Width*BPP+7)/8)%4)%4); // (bytes)

	for (int row=0; row<Height; row++)
	{
		char * pPixel;
		// If height is positive the bmp is bottom-up, set adequate row info:
		pPixel= Raster + BytesPerRow *
			( (bmih.biHeight>0)? Height-row-1 : row );

		if (BPP >= 8)	// 8 or more BPP: Read as block.
			bmpfile.read (pPixel, Width*BPP/8);

		else				// Less than 8BPP: Read and store byte aligned.
		{
			int charGot;
			for (int col=0; col < Width; col+=PixelsPerByte)
			{
				charGot=bmpfile.get();
				for (int bit=8 ; bit >0 ; bit -= BPP)	// high to low
					*pPixel++ = (charGot>> (bit - BPP)) & BitMask;
			}
		}
		// Ignore aligment bytes of file:
		for (int m=0; m<RowAlignmentInFile; m++) bmpfile.get ();
	}

	bmpfile.close();
	return 1;
}


// ****************************************************************************
// * SaveBMP                                                                  *
// *   Save the content of a C_Image object into a BMP file                   *
// *                        (c) Sept2000, Juan Soulie <jsoulie@cplusplus.com> *
// ****************************************************************************
int C_Image::SaveBMP (char * szFileName)
{
	int n;

	// Create file.
	ofstream bmpfile (szFileName , ios::out | ios::binary | ios::trunc);
	if (! bmpfile.is_open()) { ERRORMSG("Error creating file"); return 0;}

	// determine BPP for file:
	int SaveBPP;
	if (BPP == 1) SaveBPP=1;
	else if (BPP <= 4) SaveBPP=4;
	else if (BPP <= 8) SaveBPP=8;
	else SaveBPP=24;

	// *1* SAVE BITMAP FILE HEADER
	struct BITMAPFILEHEADER {
		unsigned short	bfType; 
		unsigned long	bfSize; 
		unsigned short	bfReserved1; 
		unsigned short	bfReserved2; 
		unsigned long	bfOffBits; 
	} bmfh;

	bmfh.bfType='MB';
	bmfh.bfSize=0;	// TO DO
	bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
	bmfh.bfOffBits = 54 + ((SaveBPP==24) ? 0 : (1<<SaveBPP)*4);
	bmpfile.write ((char*)&bmfh,sizeof (bmfh));

	// *2* SAVE BITMAP INFO HEADER
	struct BITMAPINFOHEADER {
		unsigned long  biSize;
		         long  biWidth;
		         long  biHeight;
		unsigned short biPlanes;
		unsigned short biBitCount;
		unsigned long  biCompression;
		unsigned long  biSizeImage;
		         long  biXPelsPerMeter;
		         long  biYPelsPerMeter;
		unsigned long  biClrUsed;
		unsigned long  biClrImportant;
	} bmih;

	bmih.biSize=sizeof(bmih);
	bmih.biWidth=Width;
	bmih.biHeight=Height;	// down-top
	bmih.biPlanes=1;
	bmih.biBitCount=SaveBPP;
	bmih.biCompression=0;// BI_RGB?
	bmih.biSizeImage =(Width*BPP)/8;
	bmih.biSizeImage += (4- (bmih.biSizeImage)%4)%4;
	bmih.biXPelsPerMeter=11811;
	bmih.biYPelsPerMeter=11811;
	bmih.biClrUsed=0;
	bmih.biClrImportant=0;

	bmpfile.write ((char*)&bmih,sizeof (bmih));

	// *3* IF BPP AREN'T 24, SAVE PALETTE.
	if (BPP!=24)
	{
		for (n=0;n< 1<<BPP;n++)
		{
			bmpfile.put(Palette[n].b);
			bmpfile.put(Palette[n].g);
			bmpfile.put(Palette[n].r);
			bmpfile.put((char)0);
		}
		for (;n < 1<<SaveBPP; n++)	// in case SaveBPP is higher than BPP
			bmpfile.write((char*)'\0\0\0\0',4);
	}

	// *4* SAVE RASTER DATA

	int PixelsPerByte = 8/SaveBPP;	//used only if BPP are less than 8
	int BitMask = (1<<SaveBPP)-1;	//used only if BPP are less than 8

	// Raster Data Rows are 32bit aligned in BMP files.
	int RowAlignmentInFile = ((4- ((Width*SaveBPP+7)/8)%4)%4); // (bytes)
	for (int row=0; row<Height; row++)
	{
		char * pPixel;
		// If height is positive the bmp is bottom-up, set adequate row info:
		pPixel= (char*) Raster + BytesPerRow *
			( (bmih.biHeight>0)? Height-row-1 : row );

		if (SaveBPP >= 8)	// 8 or more BPP: Save as block.
			bmpfile.write (pPixel, Width*SaveBPP/8);

		else				// Less than 8BPP: Save packing bytes.
		{
			unsigned char charToPut;
			for (int col=0; col < Width; col+=PixelsPerByte)
			{
				charToPut=0;
				for (int bit=8 ; bit >0 ; bit -= BPP)	// high to low
					charToPut |= (*pPixel++ & BitMask) << (bit - BPP);
				bmpfile.put(charToPut);
			}
		}
		// Ignore aligment bytes of file:
		for (int m=0; m<RowAlignmentInFile; m++) bmpfile.put ((char)0);
	}


	bmpfile.close();
	return 1;

}

// pre-declaration:
int LZWDecoder (char*, char*, short, int, int, int, const int);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合色中文字幕| 国产精品自拍一区| 久久99久久久欧美国产| 91丝袜美女网| 久久嫩草精品久久久精品一| 亚洲午夜免费视频| 北条麻妃国产九九精品视频| 日韩美女视频一区二区在线观看| 一区二区三区在线观看视频| 国产成人免费在线观看| 日韩欧美国产精品| 亚洲国产一区二区在线播放| 成人免费视频网站在线观看| 久久人人超碰精品| 麻豆精品在线看| 欧美三级视频在线观看| 最新国产成人在线观看| 成人精品电影在线观看| 国产视频视频一区| 韩国精品主播一区二区在线观看| 91麻豆精品国产自产在线| 亚洲福利一区二区三区| 91国在线观看| 亚洲在线观看免费| 色综合天天综合在线视频| 国产精品毛片久久久久久| 国产精品资源网| 久久久蜜桃精品| 国产一区二区三区香蕉 | 久久一日本道色综合| 亚洲大尺度视频在线观看| 91网站在线观看视频| 亚洲欧美一区二区久久| 91在线观看免费视频| 亚洲色图一区二区三区| 91日韩在线专区| 亚洲激情综合网| 色综合久久久久网| 亚洲午夜电影在线观看| 欧美精品在线观看播放| 毛片av一区二区| 久久久五月婷婷| 99国产麻豆精品| 亚洲乱码国产乱码精品精可以看 | 国产精品久久精品日日| 不卡视频在线观看| 一区二区三区日韩在线观看| 欧美色图12p| 久久精品99国产精品日本| 久久久综合精品| 91偷拍与自偷拍精品| 亚洲成a人片综合在线| 日韩欧美精品三级| 国产91丝袜在线播放| 亚洲黄网站在线观看| 欧美一级片在线看| 国产伦精品一区二区三区免费迷| 国产精品视频第一区| 欧美亚州韩日在线看免费版国语版| 午夜免费欧美电影| 久久久777精品电影网影网 | 国产精品一区二区三区网站| 日本一区二区三区视频视频| 色综合色综合色综合| 奇米777欧美一区二区| 国产精品你懂的| 欧美日韩国产成人在线免费| 国产一区二区三区视频在线播放| 国产精品国产a| 91精品国产综合久久福利软件| 国产成人在线色| 亚洲影视在线播放| 国产日韩精品一区| 欧美日韩免费电影| 岛国一区二区在线观看| 午夜激情综合网| 国产精品嫩草影院av蜜臀| 日韩一级片在线观看| 北岛玲一区二区三区四区| 免费在线观看一区二区三区| 亚洲天堂网中文字| 精品国产免费一区二区三区香蕉| av电影在线观看一区| 九九精品一区二区| 午夜精品福利久久久| 国产精品嫩草99a| 精品成人私密视频| 欧美三级在线播放| 91视频免费播放| 国产福利一区二区三区在线视频| 午夜精品一区二区三区免费视频| 日本一区二区不卡视频| 精品国产乱码久久久久久免费| 欧美三级日韩三级| 一本大道久久精品懂色aⅴ| 国产xxx精品视频大全| 免费美女久久99| 日欧美一区二区| 一区二区三区 在线观看视频| 欧美激情在线一区二区| 日韩精品在线一区二区| 欧美日韩成人在线一区| 欧美影片第一页| 日本乱码高清不卡字幕| 97精品久久久午夜一区二区三区| 国产高清精品网站| 国产精品中文字幕日韩精品| 九九国产精品视频| 日本欧美大码aⅴ在线播放| 亚洲成人一区二区在线观看| 一区二区在线看| 亚洲精品久久久久久国产精华液| 国产精品久久久久久久久果冻传媒| 久久久91精品国产一区二区精品| 亚洲精品在线观| 久久久久久久免费视频了| 精品av久久707| xvideos.蜜桃一区二区| 久久久久国产一区二区三区四区| 久久久天堂av| 国产精品天干天干在观线| 国产精品国产自产拍高清av | 精品国产伦一区二区三区观看方式 | 成人黄色777网| www.爱久久.com| 色哟哟亚洲精品| 欧美在线一二三| 欧美妇女性影城| 日韩欧美另类在线| 久久久精品人体av艺术| 国产精品乱码妇女bbbb| 亚洲精品一卡二卡| 天天av天天翘天天综合网| 久久精品国产亚洲aⅴ| 国产成人午夜精品影院观看视频| 成人免费电影视频| 在线影视一区二区三区| 欧美一区二区三区电影| 久久久国产精品麻豆 | 国产日韩精品视频一区| 亚洲天堂福利av| 日韩中文欧美在线| 精品一区二区三区在线观看| 成年人国产精品| 337p亚洲精品色噜噜| 国产三级精品三级在线专区| 亚洲黄网站在线观看| 精品午夜久久福利影院| 色综合久久久久综合体| 欧美第一区第二区| 亚洲私人影院在线观看| 日韩精品亚洲专区| 成人黄色a**站在线观看| 9191成人精品久久| 国产精品免费免费| 天堂午夜影视日韩欧美一区二区| 激情综合色综合久久| 一本色道久久综合狠狠躁的推荐 | 中文字幕在线一区| 男人的天堂久久精品| 色综合亚洲欧洲| 久久免费国产精品| 亚洲成av人片在www色猫咪| 国产高清不卡二三区| 欧美美女黄视频| 国产精品久久毛片av大全日韩| 天天影视涩香欲综合网| 成年人网站91| 久久久精品影视| 欧美bbbbb| 欧美乱妇20p| 日韩美女啊v在线免费观看| 国产在线麻豆精品观看| 欧美日韩一区精品| 亚洲欧美乱综合| 国产成人aaa| 精品国产免费人成电影在线观看四季| 一区二区三区影院| 成人av在线观| 久久久av毛片精品| 日本在线不卡视频| 欧美三级电影在线观看| 亚洲欧美日韩国产手机在线| 成人一区二区在线观看| 国产午夜精品一区二区| 老司机免费视频一区二区三区| 欧美日韩国产电影| 五月婷婷激情综合| 欧美午夜精品一区| 亚洲自拍偷拍九九九| 色综合亚洲欧洲| 综合久久国产九一剧情麻豆| 成人免费看视频| 欧美激情在线一区二区三区| 国产精品一区二区不卡| 久久九九影视网| 成人午夜精品一区二区三区| 久久久不卡影院| 成人做爰69片免费看网站| 欧美国产国产综合|