SDXFrameWork 0.07 SDXFrameWork

- メインページ
- 関連ページ
- クラス

全て クラス ネームスペース 関数 変数 列挙型 列挙型の値 ページ
Image.h
1 #pragma once//☀SDL
2 #include<Multimedia/SDX.h>
3 #include<Multimedia/Screen.h>
4
5 namespace SDX
6 {
8 enum class ZMaskType
9 {
10 Clear,
11 Mask,
12 };
13
15 enum class RGBA
16 {
17 SrcR,
18 SrcG,
19
20 SrcB,
21 SrcA,
22 BlendR,
23 BlendG,
24 BlendB,
25 BlendA,
26 };
27
29 enum class ClipType
30 {
31 Less ,
32 Greater,
33 };
34
37 class Image
38 {
39 friend class Anime;
40 friend class ImagePack;
41 friend class Font;
42 friend class Drawing;
43 private:
44 bool isScreen = false;
45 bool isAlphaChannel = false;
46 bool isTrans = true;//png等の透過フラグ
47
48 SDL_Rect part;
49
50 ImageHandle handle = 0;
51
52 // 透過状態を計算する
53 void RGBACulculate() const
54 {
55 if (Screen::Single().nowBlendMode == BlendMode::NoBlend)
56 {
57 SDL_SetTextureBlendMode(handle, (SDL_BlendMode)BlendMode::Alpha);
58 SDL_SetTextureAlphaMod(handle, 255);
59 }else{
60 SDL_SetTextureBlendMode(handle, (SDL_BlendMode)Screen::Single().nowBlendMode);
61 SDL_SetTextureAlphaMod(handle, Screen::Single().blendParam);
62 }
63
64 SDL_SetTextureColorMod
65 (
66 handle,
67 Screen::Single().rgba.GetRed(),
68 Screen::Single().rgba.GetGreen(),
69 Screen::Single().rgba.GetBlue()
70 );
71 }
72
73 public:
74 Image(){}
75
76 Image(const char *ファイル名)
77 {
78 Load(ファイル名);
79 }
80
81 Image(Image& コピー元, int X頂点, int Y頂点, int 幅, int 高さ)
82 {
83 Copy(コピー元, X頂点, Y頂点, 幅, 高さ);
84 }
85
87 Image(int 幅 ,int 高さ , bool スクリーン用フラグ , bool αチャンネルフラグ = true, bool 透過フラグ = true)
88 {
89 Make(幅, 高さ, スクリーン用フラグ, αチャンネルフラグ, 透過フラグ);
90 }
91
93 bool Load(const char *ファイル名)
94 {
95 Release();
96 SDL_Surface* temp = IMG_Load(ファイル名);
97
98 if (temp == nullptr) return false;
99
100 handle = SDL_CreateTextureFromSurface(Screen::GetHandle(), temp);
101
102 part.x = 0;
103 part.y = 0;
104 part.w = temp->w;
105 part.h = temp->h;
106
107 SDL_FreeSurface(temp);
108 return (handle != nullptr);
109 }
110
112 bool Release()
113 {
114 if (this->handle != nullptr)
115 {
116 SDL_DestroyTexture(handle);
117 return true;
118 }
119 return false;
120 }
121
123 ImageHandle Make(int 幅, int 高さ, bool スクリーン用フラグ = false, bool αチャンネルフラグ = true, bool 透過フラグ = true)
124 {
125 Release();
126
127 handle = SDL_CreateTexture(Screen::GetHandle(), SDL_TEXTUREACCESS_TARGET * スクリーン用フラグ, 0, 幅, 高さ);
128 part.x = 0;
129 part.y = 0;
130 part.w = 幅;
131 part.h = 高さ;
132
133 isTrans = 透過フラグ;
134 isScreen = スクリーン用フラグ;
135 isAlphaChannel = αチャンネルフラグ;
136
137 return handle;
138 }
139
141 ImageHandle Copy(const Image& 元イメージ, int X原点, int Y原点, int 幅, int 高さ)
142 {
143 this->handle = 元イメージ.handle;
144 part.x = X原点;
145 part.y = Y原点;
146 part.w = 幅;
147 part.h = 高さ;
148
149 this->isTrans = 元イメージ.isTrans;
150 this->isScreen = false;
151 this->isAlphaChannel = false;
152
153 return handle;
154 }
155
157 ImageHandle GetHandle() const
158 {
159 return handle;
160 }
161
163 bool Draw(int X座標,int Y座標 , bool 反転フラグ = false) const
164 {
165 SDL_Rect temp = { X座標, Y座標, part.w, part.h };
166 RGBACulculate();
167 if( 反転フラグ )
168 {
169 static SDL_Point point = { 0, 0 };
170 return !SDL_RenderCopyEx(Screen::GetHandle(), handle, &part, &temp , 0 , &point , SDL_RendererFlip::SDL_FLIP_HORIZONTAL );
171 }else{
172 return !SDL_RenderCopy(Screen::GetHandle(), handle, &part, &temp );
173 }
174 }
176 bool ZMask(int X座標,int Y座標 , ZMaskType Zマスクタイプ , bool 反転フラグ = false) const
177 {
178 return false;
179 }
180
182 bool DrawExtend(int X座標A,int Y座標A,int X座標B,int Y座標B ) const
183 {
184 SDL_Rect temp = { X座標A, Y座標A, X座標B - X座標A, Y座標B - Y座標A };
185 RGBACulculate();
186 return !SDL_RenderCopy(Screen::GetHandle(), handle, &part, &temp);
187 }
189 bool ZMaskExtend(int X座標A,int Y座標A,int X座標B,int Y座標B , ZMaskType Zマスクタイプ) const
190 {
191 return false;
192 }
193
195 bool DrawRotate(int X座標, int Y座標, double 拡大率, double 角度, bool 反転フラグ = false) const
196 {
197 const int wbuf = int(part.w*拡大率);
198 const int hbuf = int(part.h*拡大率);
199 SDL_Rect temp = { X座標 - wbuf/2, Y座標 - hbuf/2, wbuf , hbuf };
200 SDL_Point point = { wbuf / 2, hbuf / 2 };
201 RGBACulculate();
202 return !SDL_RenderCopyEx(Screen::GetHandle(), handle, &part, &temp, 角度*180 / PAI, &point, SDL_RendererFlip(反転フラグ));
203 }
205 bool ZMaskRotate(int X座標, int Y座標, double 拡大率, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ = false) const
206 {
207 return false;
208 }
209
211 bool DrawRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率, double 角度, bool 反転フラグ = false) const
212 {
213 const int wbuf = int(part.w*拡大率);
214 const int hbuf = int(part.h*拡大率);
215 SDL_Rect temp = { X座標 - wbuf / 2, Y座標 - hbuf / 2, wbuf, hbuf };
216 SDL_Point point = { int(X軸*拡大率), int(Y軸*拡大率) };
217 RGBACulculate();
218 return !SDL_RenderCopyEx(Screen::GetHandle(), handle, &part, &temp, 角度*180 / PAI , &point, SDL_RendererFlip(反転フラグ));
219 }
221 bool ZMaskRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ = false) const
222 {
223 return false;
224 }
225
227 bool DrawRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率X, double 拡大率Y, double 角度, bool 反転フラグ = false) const
228 {
229 const int wbuf = int(part.w*拡大率X);
230 const int hbuf = int(part.h*拡大率Y);
231 SDL_Rect temp = { X座標 - wbuf / 2, Y座標 - hbuf / 2, wbuf, hbuf };
232 SDL_Point point = { int(X軸*拡大率X) , int(Y軸*拡大率Y) };
233 RGBACulculate();
234 return !SDL_RenderCopyEx(Screen::GetHandle(), handle, &part, &temp, 角度*180/PAI, &point, SDL_RendererFlip(反転フラグ));
235 }
237 bool ZMaskRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率X, double 拡大率Y, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ = false) const
238 {
239 return false;
240 }
241
243 bool DrawModify(int 頂点aX, int 頂点aY, int 頂点bX, int 頂点bY, int 頂点cX, int 頂点cY, int 頂点dX, int 頂点dY) const
244 {
245 return false;
246 }
247
249 bool ZMaskModify(int 頂点aX, int 頂点aY, int 頂点bX, int 頂点bY, int 頂点cX, int 頂点cY, int 頂点dX, int 頂点dY, ZMaskType Zマスクタイプ) const
250 {
251 return false;
252 }
253
255 bool DrawPart(int 描画先X座標, int 描画先Y座標, int 描画元X原点, int 描画元Y原点, int 幅, int 高さ, bool 反転フラグ = false) const
256 {
257 SDL_Rect temp = { 描画先X座標, 描画先Y座標, 幅, 高さ };
258 SDL_Rect part = { 描画元X原点 + this->part.x, 描画元Y原点 + this->part.y, 幅, 高さ };
259 static SDL_Point point = { 0, 0 };
260 RGBACulculate();
261 return !SDL_RenderCopyEx(Screen::GetHandle(), handle, &part, &temp, 0, &point, SDL_RendererFlip(反転フラグ));
262 }
264 bool ZMaskPart(int 描画先X座標, int 描画先Y座標, int 描画元X原点, int 描画元Y原点, int 幅, int 高さ, ZMaskType Zマスクタイプ, bool 反転フラグ = false) const
265 {
266 return false;
267 }
268
271 int LoadScreen(int X座標,int Y座標)
272 {
273 return false;
274 }
275
277 int GetWidth() const
278 {
279 return part.w;
280 }
281
283 int GetHeight() const
284 {
285 return part.h;
286 }
287
289 bool GetIsScreen() const
290 {
291 return this->isScreen;
292 }
293
295 bool GetIsAlphaChannel() const
296 {
297 return this->isAlphaChannel;
298 }
299
301 bool GetIsTrans() const
302 {
303 return this->isTrans;
304 }
305
308 bool SetDrawScreen()
309 {
310 return false;
311 }
312 };
313 }
SDX::ZMaskType
ZMaskType
Zマスクの種類.
Definition: Image.h:8
SDX::Color::GetGreen
int GetGreen() const
緑の要素を取得.
Definition: Color.h:31
SDX::Image::ZMaskRotate
bool ZMaskRotate(int X座標, int Y座標, double 拡大率, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ=false) const
角度、拡大率を指定してマスク[DXLIB].
Definition: Image.h:205
SDX::Image::ZMask
bool ZMask(int X座標, int Y座標, ZMaskType Zマスクタイプ, bool 反転フラグ=false) const
指定座標にマスク[DXLIB].
Definition: Image.h:176
SDX::Image::ZMaskRotateAxis
bool ZMaskRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率X, double 拡大率Y, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ=false) const
回転軸、角度、拡大率を縦横別に指定してマスク[DXLIB].
Definition: Image.h:237
SDX::ClipType
ClipType
説明.
Definition: Image.h:29
SDX::Color::GetBlue
int GetBlue() const
青の要素を取得.
Definition: Color.h:37
SDX::Image::GetIsAlphaChannel
bool GetIsAlphaChannel() const
αチャンネルフラグを取得.
Definition: Image.h:295
SDX::Screen::Single
static Screen & Single()
シングルトンなインスタンスを取得.
Definition: Screen.h:42
SDX::Drawing
リソースを読み込まずに描画を行う関数群.
Definition: Drawing.h:12
SDX::Image::Make
ImageHandle Make(int 幅, int 高さ, bool スクリーン用フラグ=false, bool αチャンネルフラグ=true, bool 透過フラグ=true)
空のイメージを作成.
Definition: Image.h:123
SDX::Image::Draw
bool Draw(int X座標, int Y座標, bool 反転フラグ=false) const
指定座標に描画.
Definition: Image.h:163
SDX::Image::GetHandle
ImageHandle GetHandle() const
ハンドルを取得.
Definition: Image.h:157
SDX::Font
フォントデータを表すクラス.
Definition: Font.h:23
SDX::Image::ZMaskRotateAxis
bool ZMaskRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率, double 角度, ZMaskType Zマスクタイプ, bool 反転フラグ=false) const
回転軸、角度、拡大率を指定してマスク[DXLIB].
Definition: Image.h:221
SDX::Image::SetDrawScreen
bool SetDrawScreen()
描画先にこのイメージに指定[未実装].
Definition: Image.h:308
SDX::Image::ZMaskExtend
bool ZMaskExtend(int X座標A, int Y座標A, int X座標B, int Y座標B, ZMaskType Zマスクタイプ) const
指定矩形内にマスク[DXLIB].
Definition: Image.h:189
SDX::Image
画像データを表すクラス.
Definition: Image.h:37
SDX::Image::GetHeight
int GetHeight() const
高さを取得.
Definition: Image.h:283
SDX::Image::GetWidth
int GetWidth() const
幅を取得.
Definition: Image.h:277
SDX::Image::Release
bool Release()
イメージをメモリから開放.
Definition: Image.h:112
SDX::Image::DrawPart
bool DrawPart(int 描画先X座標, int 描画先Y座標, int 描画元X原点, int 描画元Y原点, int 幅, int 高さ, bool 反転フラグ=false) const
一部を指定して描画.
Definition: Image.h:255
SDX::Image::LoadScreen
int LoadScreen(int X座標, int Y座標)
スクリーンの一部をイメージに取り込む[DXLIB].
Definition: Image.h:271
SDX::Image::DrawRotateAxis
bool DrawRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率X, double 拡大率Y, double 角度, bool 反転フラグ=false) const
回転軸、角度、拡大率を縦横別に指定して描画.
Definition: Image.h:227
SDX::Image::Copy
ImageHandle Copy(const Image &元イメージ, int X原点, int Y原点, int 幅, int 高さ)
元イメージの一部をコピーして、別イメージを作成.
Definition: Image.h:141
SDX::RGBA
RGBA
説明.
Definition: Image.h:15
SDX::Anime
Imageをまとめてコマ送りアニメとして表すクラス.
Definition: Anime.h:28
SDX::Image::GetIsScreen
bool GetIsScreen() const
説明.
Definition: Image.h:289
SDX::ImagePack
複数のImageをまとめるクラス.
Definition: ImagePack.h:9
SDX::ZMaskType::Mask
マスクする
SDX::Image::Image
Image(int 幅, int 高さ, bool スクリーン用フラグ, bool αチャンネルフラグ=true, bool 透過フラグ=true)
空のイメージを作成.
Definition: Image.h:87
SDX::Image::DrawRotateAxis
bool DrawRotateAxis(int X座標, int Y座標, int X軸, int Y軸, double 拡大率, double 角度, bool 反転フラグ=false) const
回転軸、角度、拡大率を指定して描画.
Definition: Image.h:211
SDX::ZMaskType::Clear
マスクを切り取る
SDX::Image::ZMaskModify
bool ZMaskModify(int 頂点aX, int 頂点aY, int 頂点bX, int 頂点bY, int 頂点cX, int 頂点cY, int 頂点dX, int 頂点dY, ZMaskType Zマスクタイプ) const
四角形に変形マスク[DXLIB].
Definition: Image.h:249
SDX::Image::DrawExtend
bool DrawExtend(int X座標A, int Y座標A, int X座標B, int Y座標B) const
指定矩形内に描画.
Definition: Image.h:182
SDX::Image::Load
bool Load(const char *ファイル名)
画像をメモリへ読み込む.
Definition: Image.h:93
SDX::Image::DrawModify
bool DrawModify(int 頂点aX, int 頂点aY, int 頂点bX, int 頂点bY, int 頂点cX, int 頂点cY, int 頂点dX, int 頂点dY) const
四角形に変形描画[DXLIB].
Definition: Image.h:243
SDX::Image::GetIsTrans
bool GetIsTrans() const
透過フラグを取得.
Definition: Image.h:301
SDX::Image::ZMaskPart
bool ZMaskPart(int 描画先X座標, int 描画先Y座標, int 描画元X原点, int 描画元Y原点, int 幅, int 高さ, ZMaskType Zマスクタイプ, bool 反転フラグ=false) const
一部を指定してマスク[DXLIB].
Definition: Image.h:264
SDX::Screen::GetHandle
static ScreenHandle GetHandle()
スクリーンハンドルを取得.
Definition: Screen.h:49
SDX::Image::DrawRotate
bool DrawRotate(int X座標, int Y座標, double 拡大率, double 角度, bool 反転フラグ=false) const
角度、拡大率を指定して描画.
Definition: Image.h:195