2004年に書いていたソースコードを公開

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

2004年に書いていたソースコードを公開

投稿記事 by naohiro19 » 13年前

2004年に書いていたソースコードを公開します。当時書いていたプログラムが間違ってたので修正版です。当時はVisual C++ 6.0でプログラミングしていました。

CODE:

//Image.h
#ifndef IMAGE_H
#define IMAGE_H

#include 

typedef struct tagImage
{
	int		width;		//横幅
	int		height;		//縦幅
	HDC		hdc;		//デバイスコンテキスト
	HBITMAP hbmp;		//ビットマップハンドル
}IMAGE,*LPIMAGE;



int CreateImage(IMAGE* image, HWND hWnd, int w, int h);
int CreateImageFromFileA(IMAGE* img, HWND hWnd, const char* name);    //マルチバイト対応版
int CreateImageFromFileW(IMAGE* img, HWND hWnd, const wchar_t* name); //ユニコード対応版
int BltImage(IMAGE* dst,int x,int y,IMAGE* scr, RECT scr_r,DWORD flag);
int DeleteImage(IMAGE* image);

#ifdef _UNICODE
#define CreateImageFromFile CreateImageFromFileW
#else
#define CreateImageFromFile CreateImageFromFileA
#endif

#endif

CODE:

//Image.cpp
#include "stdafx.h"
#include "Image.h"

//------------------------------------------------------------
//  CreateImage()
//  Memo:画像の作成する
//------------------------------------------------------------
int CreateImage(
			IMAGE* image,			//画像を作成するためのポインタ
			HWND hWnd,				//ウィンドウハンドル
			int w, int h)			//作成する横幅と縦幅
{
	HDC hdc;
	hdc = GetDC(hWnd);
	//仮想画面とDCの作成
	image->hbmp = CreateCompatibleBitmap(hdc, w, h);
	image->hdc  = CreateCompatibleDC(hdc);
	ReleaseDC(hWnd, hdc);
	
	if( image->hbmp == NULL || image->hdc == NULL ){
		return -1;
	}

	SelectObject(image->hdc, image->hbmp);
	image->width = w;
	image->height = h;
	
	BitBlt(image->hdc, 0, 0, w, h, NULL, 0, 0, WHITENESS);
	return 0;
}

//------------------------------------------------------------
//       CreateImageFromFileA()
//       Memo:画像のロード(マルチバイト文字列対応版)
//------------------------------------------------------------
int CreateImageFromFileA(
						IMAGE* img,			//画像格納用変数ポインタ
						HWND hWnd,			//ウィンドウハンドル
						const char* name)	//読み込むファイル名
{
	HDC hdc;
	HINSTANCE hInst;
	BITMAP bmp;
	
	//画像ファイルのロード
	hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
	img->hbmp = (HBITMAP)LoadImageA(hInst, name, IMAGE_BITMAP,
		0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

	//DCの作成
	hdc = GetDC(hWnd);
	img->hdc = CreateCompatibleDC(hdc);
	ReleaseDC(hWnd, hdc);

	//関連付け
	SelectObject(img->hdc, img->hbmp );
	if( img->hbmp == NULL || img->hdc == NULL ){
		return -1;
	}

	//ビットマップ情報の取得
	if(GetObject(img->hdc, sizeof(BITMAP), &bmp) == 0){
		return -1;
	}
	img->width = bmp.bmWidth;
	img->height = bmp.bmHeight;
	return 0;
}

//------------------------------------------------------------
//       CreateImageFromFileW()
//       Memo:画像のロード(ユニコード文字列対応版)
//------------------------------------------------------------
int CreateImageFromFileW(
						 IMAGE* img,			//画像格納用変数ポインタ
						 HWND hWnd,				//ウィンドウハンドル
						 const wchar_t* name)	//読み込むファイル名
{
	HDC hdc;
	HINSTANCE hInst;
	BITMAP bmp;
	
	//画像ファイルのロード
	hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
	img->hbmp = (HBITMAP)LoadImageW(hInst, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

	//DCの作成
	hdc = GetDC(hWnd);
	img->hdc = CreateCompatibleDC(hdc);
	ReleaseDC(hWnd, hdc);

	//関連付け
	SelectObject(img->hdc, img->hbmp );
	if( img->hbmp == NULL || img->hdc == NULL ){
		return -1;
	}

	//ビットマップ情報の取得
	GetObject(img->hdc, sizeof(BITMAP), &bmp);
	img->width = bmp.bmWidth;
	img->height = bmp.bmHeight;
	return 0;
}

//----------------------------------------------------------
//       BltImage()
//       Memo:描画する処理
//----------------------------------------------------------
int BltImage(
			 IMAGE*		dst,	//転送先イメージ
			 int		x,		//転送先X座標
			 int		y,		//転送先Y座標
			 IMAGE*		scr,	//転送元イメージ
			 RECT		scr_r,	//転送元領域
			 DWORD		flag)	//転送フラグ
{
	int w = scr_r.right - scr_r.left;
	int h = scr_r.bottom = scr_r.top;
	
	BitBlt(dst->hdc, x, y, w, h, scr->hdc, scr_r.left, scr_r.top, flag);
	return 1;
}

//----------------------------------------------------------
//       DeleteImage()
//       Memo:画像を破棄する
//----------------------------------------------------------
int DeleteImage(IMAGE* image)
{
	DeleteDC(image->hdc);
	DeleteObject(image->hbmp);
	image->hdc = NULL;
	image->hbmp = NULL;
	return 0;
}
CreateImageもしくはCreateImageFromFileを呼び出した後はDeleteImageで破棄してください。
最後に編集したユーザー naohiro19 on 2015年10月01日(木) 13:10 [ 編集 6 回目 ]

コメントはまだありません。