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

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

?? cimageb.cpp

?? 一套圖像處理程序,支持三種圖像文件格式,我調試過了,很好用
?? CPP
字號:
/*
 * File:	cimageb.cc
 * Purpose:	Platform Independent Image Base Class (Windows version)
 * Author:	Alejandro Aguilar Sierra
 * Created:	1995
 * Copyright:	(c) 1995 Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
 */

#include "stdafx.h"
#include <windowsx.h>
#include "cmap.h"
#include "cimageb.h"
#include "dibutils.h"

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

void
CImageImpl::Create(int width, int height, int depth, int colortype)
{
  Width = width; Height = height; Depth = depth;
  ColorType = (colortype>=0) ? colortype: ((Depth>8) ? COLORTYPE_COLOR: 0);

  if (lpbi)
    GlobalFreePtr(lpbi);
  RawImage = 0;
  if (imagePalette)
    delete imagePalette;
  imagePalette = 0;
  if (lpbi = DibCreate(Depth, Width, Height))  {
		RawImage = (ImagePointerType)DibPtr(lpbi);
		EffWidth = (long)(((long)Width*Depth + 31) / 32) * 4;
  }
}

CImageImpl::~CImageImpl ( )
{
  if (lpbi)  {
	 GlobalFreePtr(lpbi);
	 delete imagePalette;
  }
}


int CImageImpl::GetIndex(int x, int y)
{
  if (!Inside(x, y) || (Depth>8)) return -1;

  ImagePointerType ImagePointer = RawImage + EffWidth*y + (x*Depth >> 3);
  int index = (int)(*ImagePointer);
  return index;
}

BOOL CImageImpl::GetRGB(int x, int y, byte* r, byte* g, byte* b)
{
  if (!Inside(x, y)) return FALSE;

  if (imagePalette) {
	 return imagePalette->GetRGB(GetIndex(x, y), r, g, b);
/*	 PALETTEENTRY entry;
	 ::GetPaletteEntries((HPALETTE) (*imagePalette), GetIndex(x, y), 1, &entry);
	 *r = entry.peRed;
	 *g = entry.peGreen;
	 *b = entry.peBlue;  */
  } else {
	 ImagePointerType ImagePointer = RawImage + EffWidth*y + (x*Depth >> 3);
	 *b = ImagePointer[0];
	 *g = ImagePointer[1];
	 *r = ImagePointer[2];
  }
  return TRUE;
}


BOOL CImageImpl::SetIndex(int x, int y, int index)
{
  if (!Inside(x, y) || (Depth>8)) return FALSE;

  ImagePointerType ImagePointer = RawImage + EffWidth*y + (x*Depth >> 3);
  *ImagePointer = index;

  return TRUE;
}

BOOL CImageImpl::SetRGB(int x, int y, byte r, byte g, byte b)
{
  if (!Inside(x, y)) return FALSE;

  if (ColorType & COLORTYPE_PALETTE)
  {
	 if (!imagePalette) return FALSE;
	 SetIndex(x, y, imagePalette->GetPixel(r, g, b));

  } else {
	 ImagePointerType ImagePointer = RawImage + EffWidth*y + (x*Depth >> 3);
	 ImagePointer[0] = b;
	 ImagePointer[1] = g;
	 ImagePointer[2] = r;
  }

  return TRUE;
}

BOOL CImageImpl::SetPalette(CImagePalette* colourmap)
{
  if (!colourmap)
	 return FALSE;
  ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
  imagePalette = colourmap;
  return DibSetUsage(lpbi, (HPALETTE) (*imagePalette), CIMAGE_COLORS );
}

BOOL
CImageImpl::SetPalette(int n, byte *r, byte *g, byte *b)
{
  imagePalette = new CImagePalette();
  if (!imagePalette)
	 return FALSE;

  if (!g) g = r;
  if (!b) b = g;
  imagePalette->Create(n, r, g, b);
  ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
  return DibSetUsage(lpbi, (HPALETTE) (*imagePalette), CIMAGE_COLORS );
}

BOOL
CImageImpl::SetPalette(int n, rgb_color_struct *rgb_struct)
{
  if (imagePalette)
    AfxMessageBox("CImageImpl::imagePalette already exists!");
    
  imagePalette = new CImagePalette();
  if (!imagePalette)
	 return FALSE;

  byte r[256], g[256], b[256];

  for(int i=0; i<n; i++)
  {
	 r[i] = rgb_struct[i].red;
	 g[i] = rgb_struct[i].green;
	 b[i] = rgb_struct[i].blue;
  }
  imagePalette->Create(n, r, g, b);
  ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
  return DibSetUsage(lpbi, (HPALETTE) (*imagePalette), CIMAGE_COLORS );
}

BOOL CImageImpl::Draw(CDC *cdc, int x, int y, int dx, int dy, int xs, int ys)
{
  if (lpbi)
  {
	 HDC dc = cdc->GetSafeHdc();

	 if (dc)   {
		::RealizePalette(dc);
		if (dx==-1)  dx = GetWidth();
		if (dy==-1)  dy = GetHeight();

		SetDIBitsToDevice(dc, x, y, dx, dy, xs, 0, ys, dy,
			RawImage, (BITMAPINFO *)lpbi, CIMAGE_COLORS );
	 }
	 return TRUE;
  }
  else
	 return FALSE;

}

BOOL CImageImpl::Stretch(CDC *cdc, int xd, int yd, int dxd, int dyd,
	 int xs, int ys, int dxs, int dys)
{
  if (lpbi)
  {
	HDC dc =  cdc->GetSafeHdc();

	 if (dc)   {
		if (dxd==-1) dxd = GetWidth();
		if (dyd==-1) dyd = GetHeight();
		if (dxs==-1) dxs = Width - xs;
		if (dys==-1) dys = Height - ys;
		::RealizePalette(dc);

#ifdef WIN32       // Paul Shirley's patch
		SetStretchBltMode(dc, COLORONCOLOR);
#else
		SetStretchBltMode(dc, STRETCH_DELETESCANS);
#endif

	  if (bgindex == -1)
	  {
			StretchDIBits(dc, xd, yd, dxd, dyd, xs, ys, dxs, dys,
				RawImage, (BITMAPINFO *)lpbi, CIMAGE_COLORS, SRCCOPY);
		}
		else
		{
			//HDC tmpdc = CreateCompatibleDC(dc);
			//HBITMAP tmpbmp = CreateCompatibleBitmap(dc, dxd, dyd);
			//SelectObject(tmpdc, tmpbmp);
			//BitBlt(tmpdc, 0, 0, dxd, dyd, dc, xd, yd, SRCCOPY);

			unsigned char* save_index = new unsigned char[Height*Width];
			int black = imagePalette->GetPixel(0, 0, 0);
			int white = imagePalette->GetPixel(255, 255, 255);

			// Make background white and foreground black to use as mask...

			int x, y;

			for (y = 0; y < Height; y++)
				for (x = 0; x < Width; x++)
				{
					long i = ((long)y*Width)+x;
					save_index[i] = (unsigned char)GetIndex(x, y);

					if (GetIndex(x, y) == bgindex)
						SetIndex(x, y, white);
					else
						SetIndex(x, y, black);
				}

			// AND into the canvas, this will preserve the background but
			// turn the foreground white...

			//StretchDIBits(tmpdc, 0, 0, dxd, dyd, xs, ys, dxs, dys,
			StretchDIBits(dc, xd, yd, dxd, dyd, xs, ys, dxs, dys,
				RawImage, (BITMAPINFO *)lpbi, CIMAGE_COLORS, SRCAND);

			// Restore foreground & make background black...

			for (y = 0; y < Height; y++)
				for (x = 0; x < Width; x++)
				{
					long i = ((long)y*Width)+x;
					SetIndex(x, y, save_index[i]);

					if (GetIndex(x, y) == bgindex)
						SetIndex(x, y, black);
				}

			// OR into the canvas, this will preserve the background but
			// copy the foreground...

			//StretchDIBits(tmpdc, 0, 0, dxd, dyd, xs, ys, dxs, dys,
			StretchDIBits(dc, xd, yd, dxd, dyd, xs, ys, dxs, dys,
				RawImage, (BITMAPINFO *)lpbi, CIMAGE_COLORS, SRCPAINT);

			for (y = 0; y < Height; y++)
				for (x = 0; x < Width; x++)
				{
					long i = ((long)y*Width)+x;
					SetIndex(x, y, save_index[i]);
				}

			delete [] save_index;

			//BitBlt(dc, xd, yd, dxd, dyd, tmpdc, 0, 0, SRCCOPY);
			//DeleteDC(tmpdc);
			//DeleteObject(tmpbmp);
		}
	 }
	 return TRUE;
  }
  else
	 return FALSE;
}

void CImageImpl::TransferBits(CImageImpl *from)
{
  if (lpbi)
  {
    GlobalFreePtr(lpbi);
    lpbi = NULL;
  }
  if (imagePalette)
  {
    delete imagePalette;
    imagePalette = NULL;
  }

  lpbi = from->lpbi;
  bgindex = from->bgindex;
  imagePalette = from->imagePalette;
  RawImage = from->RawImage;
  Width = from->Width;
  Height = from->Height;
  Depth = from->Depth;
  ColorType = from->ColorType;
  EffWidth = from->EffWidth;
  
  from->RawImage = NULL;
  from->lpbi = NULL;
  from->imagePalette = NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区蜜桃臀影院| 一本色道久久综合亚洲精品按摩| 欧美军同video69gay| 丝袜诱惑制服诱惑色一区在线观看| 欧美日韩久久不卡| 日韩电影在线免费| 日韩精品一区在线| 成人黄色av电影| 亚洲一区二区三区四区在线观看 | 亚洲一区二区三区自拍| 欧美日韩你懂的| 激情综合色综合久久| 亚洲欧美自拍偷拍色图| 欧美日韩免费视频| 国产一区二区三区在线看麻豆 | 国产精品乱码一区二三区小蝌蚪| 99久久精品国产观看| 亚洲第一av色| 久久亚洲二区三区| 91蝌蚪国产九色| 蜜臀va亚洲va欧美va天堂| 日本一区二区三区免费乱视频 | 中文字幕欧美一区| 6080国产精品一区二区| 国产精品一区二区91| 亚洲精选视频在线| 精品福利二区三区| 91在线高清观看| 久久se精品一区精品二区| 亚洲欧洲精品一区二区三区不卡| 欧美精品123区| 99久久免费精品| 精品一区二区三区av| 亚洲一区中文日韩| 国产亚洲精品7777| 欧美精品99久久久**| av高清久久久| 欧美这里有精品| 男人的j进女人的j一区| 亚洲一区二区av在线| 日韩精品一区二区三区在线观看| 亚洲精品国产一区二区精华液| 日本韩国一区二区| 色综合天天做天天爱| 国产乱人伦精品一区二区在线观看| 日韩理论片一区二区| 国产精品超碰97尤物18| 亚洲男女一区二区三区| 亚洲免费在线看| 亚洲国产综合视频在线观看| 亚洲国产精品一区二区久久| 亚洲超丰满肉感bbw| 日韩va亚洲va欧美va久久| 久久精品72免费观看| 国产乱国产乱300精品| 国产iv一区二区三区| a亚洲天堂av| 在线视频中文字幕一区二区| 欧美精品欧美精品系列| 2024国产精品视频| 中文字幕人成不卡一区| 亚洲成人精品一区二区| 美女一区二区视频| 成人国产在线观看| 欧美少妇bbb| 日韩亚洲欧美在线| 中文字幕乱码日本亚洲一区二区| 亚洲婷婷综合色高清在线| 成人免费一区二区三区在线观看| 亚洲福利视频三区| 精品一区二区三区免费毛片爱 | 亚洲地区一二三色| 久久99这里只有精品| 成人久久视频在线观看| 欧美无砖砖区免费| 久久影院视频免费| 一区二区三区免费在线观看| 青青草国产精品97视觉盛宴| 国产大片一区二区| 欧美性极品少妇| 国产亚洲欧洲一区高清在线观看| 亚洲柠檬福利资源导航| 黑人精品欧美一区二区蜜桃 | 国产欧美精品一区二区三区四区| 久久久久久久久免费| 国产精品初高中害羞小美女文 | 亚洲自拍都市欧美小说| 日韩不卡免费视频| 国产不卡免费视频| 欧美伊人久久久久久久久影院| 日韩你懂的在线观看| 中文字幕一区二区三区不卡| 亚洲高清中文字幕| 国产精品亚洲视频| 欧美日韩免费在线视频| 国产欧美日韩久久| 国产欧美一区二区精品性色 | 精品av综合导航| 亚洲美女少妇撒尿| 国产精品亚洲专一区二区三区 | 色噜噜久久综合| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一级欧美三级在线观看| **性色生活片久久毛片| 国产精品一区免费视频| 在线不卡a资源高清| 亚洲精品国产a| 成人一区二区视频| 久久久99久久| 久久国产麻豆精品| 欧美一卡2卡三卡4卡5免费| 亚洲免费观看视频| 99re热这里只有精品视频| 精品国产人成亚洲区| 五月天一区二区| 在线观看欧美精品| 亚洲欧美日韩中文字幕一区二区三区| 亚洲丰满少妇videoshd| 日韩二区三区四区| 欧美日韩免费观看一区三区| 亚洲乱码中文字幕| 国产超碰在线一区| 欧美一区二区三区思思人| 国产婷婷色一区二区三区| 亚洲天堂福利av| 国产在线一区观看| 久久久久国产一区二区三区四区 | 不卡电影免费在线播放一区| 2017欧美狠狠色| 精品一二三四区| 欧美电影免费观看高清完整版| 亚洲成va人在线观看| 欧美高清www午色夜在线视频| 亚洲国产综合视频在线观看| 欧美视频自拍偷拍| 爽好多水快深点欧美视频| 欧美男同性恋视频网站| 日韩中文字幕亚洲一区二区va在线 | www.欧美日韩国产在线| 精品国产一区二区三区av性色| 麻豆国产欧美一区二区三区| 日韩三级在线观看| 国内欧美视频一区二区| 国产日韩精品一区二区浪潮av | 国产精品自拍三区| 久久久99久久| www.欧美色图| 一区二区在线看| 欧美疯狂性受xxxxx喷水图片| 视频一区二区欧美| www国产成人| eeuss鲁片一区二区三区在线观看| 国产精品黄色在线观看| 色噜噜狠狠色综合中国| 亚洲人一二三区| 88在线观看91蜜桃国自产| 麻豆成人久久精品二区三区小说| 欧美午夜电影网| 精品一区二区三区在线观看| 国产清纯在线一区二区www| 色综合久久88色综合天天免费| 亚洲一区二区精品久久av| 日韩视频一区二区在线观看| 懂色av一区二区在线播放| 亚洲欧美一区二区在线观看| 色婷婷av一区| 亚洲一区二区三区小说| 欧美精品黑人性xxxx| 久久精品国产久精国产| 精品第一国产综合精品aⅴ| 美腿丝袜亚洲一区| 不卡一区二区三区四区| 亚洲美女视频在线观看| 欧美日本一区二区在线观看| 日韩av一区二区在线影视| 欧美不卡视频一区| 成人高清av在线| 亚洲另类春色校园小说| 欧美日韩日日夜夜| 国内外成人在线| 久久免费视频一区| 亚洲最大色网站| 日韩欧美久久久| 色偷偷久久一区二区三区| 蜜臀av在线播放一区二区三区| 国产精品欧美久久久久无广告 | 99免费精品视频| 蜜臀av一区二区在线免费观看| 国产精品青草久久| 日韩色视频在线观看| 在线影视一区二区三区| 国产精品18久久久久久久网站| 亚洲欧美另类久久久精品| 久久你懂得1024| 欧美精品自拍偷拍动漫精品| 91香蕉国产在线观看软件| 国产乱一区二区| 日本女人一区二区三区| 亚洲自拍偷拍九九九| 国产精品久久国产精麻豆99网站|