-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathpsdclass.h
More file actions
236 lines (191 loc) · 6.35 KB
/
psdclass.h
File metadata and controls
236 lines (191 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#ifndef __PSDCLASS_H__
#define __PSDCLASS_H__
//#define LOAD_MEMORY
#include "stdafx.h"
#include <tp_stub.h>
#include "psdparse/psdfile.h"
class PSDStorage;
class PSDIterator;
class PSD : public psd::PSDFile
{
friend class PSDStorage;
friend class PSDIterator;
public:
/**
* コンストラクタ
*/
PSD(iTJSDispatch2 *objthis);
/**
* デストラクタ
*/
~PSD();
/**
* 内包データの消去
*/
virtual void clearData();
/**
* インスタンス生成ファクトリ
*/
static tjs_error factory(PSD **result, tjs_int numparams, tTJSVariant **params, iTJSDispatch2 *objthis);
/**
* 生成時の自己オブジェクトを取得
*/
tTJSVariant getSelf();
/**
* PSD画像のロード
* @param filename ファイル名
* @return ロードに成功したら true
*/
bool load(ttstr filename);
static void clearStorageCache();
#define INTGETTER(tag) int get_ ## tag(){ return isLoaded ? header.tag : -1; }
INTGETTER(width);
INTGETTER(height);
INTGETTER(channels);
INTGETTER(depth);
int get_color_mode() { return isLoaded ? header.mode : -1; }
int get_layer_count() { return isLoaded ? (int)layerList.size() : -1; }
public:
/**
* レイヤ種別の取得
* @param no レイヤ番号
* @return レイヤ種別
*/
int getLayerType(int no);
/**
* レイヤ名称の取得
* @param no レイヤ番号
* @return レイヤ種別
*/
ttstr getLayerName(int no);
/**
* レイヤ情報の取得
* @param no レイヤ番号
* @return レイヤ情報が格納された辞書
*/
tTJSVariant getLayerInfo(int no);
/**
* レイヤデータの読み出し(内部処理)
* @param layer 読み出し先レイヤ
* @param no レイヤ番号
* @param imageMode イメージモード
*/
void _getLayerData(tTJSVariant layer, int no, psd::ImageMode imageMode);
/**
* レイヤデータの読み出し
* @param layer 読み出し先レイヤ
* @param no レイヤ番号
*/
void getLayerData(tTJSVariant layer, int no);
/**
* レイヤデータの読み出し(生イメージ)
* @param layer 読み出し先レイヤ
* @param no レイヤ番号
*/
void getLayerDataRaw(tTJSVariant layer, int no);
/**
* レイヤデータの読み出し(マスクのみ)
* @param layer 読み出し先レイヤ
* @param no レイヤ番号
*/
void getLayerDataMask(tTJSVariant layer, int no);
/**
* スライスデータの読み出し
* @return スライス情報辞書 %[ top, left, bottom, right, slices:[ %[ id, group_id, left, top, bottom, right ], ... ] ]
* スライス情報がない場合は void を返す
*/
tTJSVariant getSlices();
/**
* ガイドデータの読み出し
* @return ガイド情報辞書 %[ vertical:[ x1, x2, ... ], horizontal:[ y1, y2, ... ] ]
* ガイド情報がない場合は void を返す
*/
tTJSVariant getGuides();
/**
* 合成結果の取得。取得領域は画像全体サイズ内におさまってる必要があります
* 注意:PSDファイル自体に合成済み画像が存在しない場合は取得に失敗します
*
* @param layer 格納先レイヤ(width,heightサイズに調整される)
* @return 取得に成功したら true
*/
bool getBlend(tTJSVariant layer);
/**
* レイヤーカンプ
*/
tTJSVariant getLayerComp();
/**
* LayerIDが未設定のレイヤに対してID番号を自動割り付け(base_id+1からlayer_no順に)
* @param base_id 割り付けID最小番号-1(※既存の全てのレイヤIDがこれより大きかったらその値が利用される)
* @return IDを設定したレイヤの枚数
*/
int assignAutoIds(int base_id = 0);
protected:
iTJSDispatch2 *objthis; ///< 自己オブジェクト情報の参照
ttstr dname; ///< 登録用ベース名
#ifdef LOAD_MEMORY
HGLOBAL hBuffer; // オンメモリ保持用ハンドル
bool loadMemory(const ttstr &filename);
void clearMemory();
#else
// ストリームから読み込み
IStream *pStream;
tTVInteger mStreamSize;
bool loadStream(const ttstr &filename);
void clearStream();
unsigned char &getStreamValue(const tTVInteger &pos);
void copyToBuffer(uint8_t *buf, tTVInteger pos, int size);
//< PSDファイル読み込みキャッシュ用バッファ
tTVInteger mBufferPos;
ULONG mBufferSize;
unsigned char mBuffer[4*1024];
#endif
/**
* レイヤ番号が適切かどうか判定
* @param no レイヤ番号
*/
void checkLayerNo(int no);
/**
* 名前の取得
* @param layレイヤ情報
*/
static ttstr layname(psd::LayerInfo &lay);
// ------------------------------------------------------------
// ストレージレイヤ参照用インターフェース
// ------------------------------------------------------------
protected:
// ストレージ情報登録
void addToStorage(const ttstr &filename);
void removeFromStorage();
bool storageStarted; //< ストレージ用の情報初期化済みフラグ
// レイヤ名を返す
static ttstr path_layname(psd::LayerInfo &lay);
// レイヤのパス名を返す
static ttstr pathname(psd::LayerInfo &lay);
// ストレージ処理用データの初期化
void startStorage();
/*
* 指定した名前のレイヤの存在チェック
* @param name パスを含むレイヤ名
* @param layerIdxRet レイヤインデックス番号を返す
*/
bool CheckExistentStorage(const ttstr &filename, int *layerIdxRet=0);
/*
* 指定したパスにあるファイル名一覧の取得
* @param pathname パス名
* @param lister リスト取得用インターフェース
*/
void GetListAt(const ttstr &pathname, iTVPStorageLister *lister);
/*
* 指定した名前のレイヤの画像ファイルをストリームで返す
* @param name パスを含むレイヤ名
* @return ファイルストリーム
*/
IStream *openLayerImage(const ttstr &name);
// パス名記録用
typedef std::map<int,int> LayerIdIdxMap; // layerId とレイヤ情報インデックスのマップ
LayerIdIdxMap layerIdIdxMap;
typedef std::map<ttstr,int> NameIdxMap; //< レイヤ名とlayerId のマップ
typedef std::map<ttstr,NameIdxMap> PathMap; //< パス別のレイヤ名一覧
PathMap pathMap;
};
#endif