注意:このデータはpng対応前のものです。次の更新で上書きされる可能性があります。
Bitmap
変数
private: unsigned short width
private: unsigned short height
サイズ。
private: unsigned short height
サイズ。
private: bool disposed
すでに解放されてるかどうか。
すでに解放されてるかどうか。
private: unsigned int* bmpixels
カラーコードの配列。カラーコードは0xFFBBGGRRです。
カラーコードの配列。カラーコードは0xFFBBGGRRです。
public : unsigned int transparency
透過色。
透過色。
関数
Bitmap(unsigned short w = 0, unsigned short h = 0)
指定したサイズのBitmapを生成します。
指定したサイズのBitmapを生成します。
Bitmap(const char* path)
pathにある画像ファイルを読み込み、Bitmapを生成します。
pathにある画像ファイルを読み込み、Bitmapを生成します。
void dispose()
Bitmapを解放します。
Bitmapを解放します。
bool isDisposed()
ビットマップがすでに解放されている場合に真を返します。
ビットマップがすでに解放されている場合に真を返します。
unsigned short getWidth()
ビットマップの幅を取得します。
ビットマップの幅を取得します。
unsigned short getHeight()
ビットマップの高さを取得します。
ビットマップの高さを取得します。
bool blt(unsigned short x, unsigned short y, Bitmap* src_bitmap, Rect* src_rect, float opacity = 255)
src_bitmap の矩形 src_rect (Rect) から、このビットマップの座標 (x, y) にブロック転送を行います。
opacity には不透明度を 0 ~ 255 の範囲で指定できます。
src_bitmap の矩形 src_rect (Rect) から、このビットマップの座標 (x, y) にブロック転送を行います。
opacity には不透明度を 0 ~ 255 の範囲で指定できます。
bool clear(unsigned int ccolor = transparency)
ビットマップ全体をccolorでクリアします。
ビットマップ全体をccolorでクリアします。
unsigned int get_pixel(unsigned short x, unsigned short y)
点 (x, y) の色(PSP用カラーコード)を取得します。
点 (x, y) の色(PSP用カラーコード)を取得します。
bool set_pixel(unsigned short x, unsigned short y, unsigned int pix)
点 (x, y) の色を pix(PSP用カラーコード)に設定します。
点 (x, y) の色を pix(PSP用カラーコード)に設定します。
定義
//==============================================================================
// ■ Bitmap
//------------------------------------------------------------------------------
// ビットマップのクラス。ビットマップは、いわゆる画像そのものを表わします。
// 画面にビットマップを表示するためにはスプライト (Sprite) などを使う必要があります。(RGGSヘルプより)
//==============================================================================
#ifndef RPG2K_Bitmap
#define RPG2K_Bitmap
#include "[[Color]].h"
#include "Rect.h"
class Bitmap{
unsigned short width;
unsigned short height;
bool disposed;
unsigned int* bmpixels;
public:
unsigned int transparency;
// コンストラクタ
Bitmap(unsigned short w = 0, unsigned short h = 0){
bmpixels = (unsigned int*)calloc(w*h, sizeof(unsigned int));
width = w;
height = h;
disposed = false;
transparency = 0;
}
Bitmap(const char* path){
disposed = false;
fileopen(path);
}
// デストラクタ
~Bitmap(){
dispose();
}
unsigned short getWidth(){ return width;}
unsigned short getHeight(){ return height;}
//解放
void dispose(){
if(!disposed){
free(bmpixels);
disposed = true;
width = 0;
height = 0;
}
}
bool isDisposed(){ return disposed;}
// ファイルから開く 注:開発中のため独自形式のみ対応
bool fileopen(const char* path){
if(disposed) return false;
unsigned short w;
pspBasicStream file;
// ファイルオープン
if(!file.fileopen(path, false)) return false;
// 画像幅取得 (独自形式の先頭2バイト)
file.read(&w, 2);
width = (unsigned short)w;
// 画像高さ取得 (ファイルサイズ-2 /幅)
height = (file.getLength()-2)/width;
// ビットマップを開放
free(bmpixels);
// 画像読み込み
bmpixels = (unsigned int*)calloc(width*height, sizeof(unsigned int));
unsigned short x,y;
for (y = 0; y < height; ++y){
// ファイルから1ライン読み込み
unsigned int* line = &bmpixels[y * width];
file.read(line, width*4);
for (x = 0; x < width; ++x)
{
line[x] = 0xFF000000 + RGBcode(line[x]);
}
}
file.close();
return true;
}
// ビットマップをクリア
bool clear(unsigned int ccolor = 0){
if(disposed) return false;
unsigned short x,y;
for (y = 0; y < height; ++y){
unsigned int* line = &bmpixels[y * width];
for (x = 0; x < width; ++x)
{
if(ccolor==0) line[x] = transparency;
else line[x] = ccolor;
}
}
return true;
}
// ピクセル取得/設定
unsigned int get_pixel(unsigned short x, unsigned short y){
if(x > width || y > height || disposed) return false;
return bmpixels[y*width+x];
}
bool set_pixel(unsigned short x, unsigned short y, unsigned int pix){
if(x > width || y > height || disposed) return false;
bmpixels[y*width+x] = pix;
return true;
}
void get_rect(Rect* rec){
(*rec).width = width;
(*rec).height = height;
}
// src_bitmap の矩形 src_rect (Rect) から、このビットマップの座標 (x, y) にブロック転送
bool blt(unsigned short x, unsigned short y, Bitmap* src_bitmap, Rect* src_rect, float opacity = 255){
if(x > width || y > height || disposed) return false;
unsigned short a,b;
for (a = 0; a < (*src_rect).height; ++a)
{
if(a >= height) break;
unsigned int* line = &bmpixels[(y + a) * width];
for (b = 0; b < (*src_rect).width; ++b)
{
if(b >= width) break;
if(opacity == 0 || (*src_bitmap).get_pixel((*src_rect).x + b, (*src_rect).y + a) == (*src_bitmap).transparency) break;
if(opacity == 255){
line[b+x] = (*src_bitmap).get_pixel((*src_rect).x + b, (*src_rect).y + a);
}else{
Color C1,C2;
C1.setBGRcode(line[b+x]);
C2.setBGRcode((*src_bitmap).get_pixel((*src_rect).x + b, (*src_rect).y + a));
C2.opacity = opacity;
C1.conposit(&C2);
line[b+x] = C1.getPSPBGRcode();
}
}
}
return true;
}
// X方向に反転
//Bitmap* reversalX(){
//
//}
};
#endif
添付ファイル