|
9 | 9 | #pragma comment(lib, "d3d9.lib" )
|
10 | 10 | #pragma comment(lib, "d3dx9.lib" )
|
11 | 11 |
|
| 12 | +#define NONDLL 1 |
| 13 | +#define MSWIN32 1 |
| 14 | +#define BGDWIN32 1 |
| 15 | +#include <gd/gd.h> |
| 16 | +#include <gd/gdfontmb.h> |
| 17 | + |
| 18 | +#if _DEBUG |
| 19 | +#pragma comment(lib,"Debug/libgd_static.lib") |
| 20 | +#else |
| 21 | +#pragma comment(lib,"Release/libgd_static.lib") |
| 22 | +#endif |
| 23 | + |
12 | 24 | //----------------------------------------------------------------------------------
|
13 | 25 | //
|
14 | 26 | //----------------------------------------------------------------------------------
|
@@ -1078,6 +1090,83 @@ Exit:;
|
1078 | 1090 | return true;
|
1079 | 1091 | }
|
1080 | 1092 |
|
| 1093 | +bool Native::RecordAsGifAnimation(const wchar_t* path, int32_t count, int32_t offsetFrame, int32_t freq, bool isTranslucent) |
| 1094 | +{ |
| 1095 | + if (g_effect == NULL) return false; |
| 1096 | + |
| 1097 | + g_renderer->IsBackgroundTranslucent = isTranslucent; |
| 1098 | + |
| 1099 | + ::Effekseer::Vector3D position(0, 0, g_Distance); |
| 1100 | + ::Effekseer::Matrix43 mat, mat_rot_x, mat_rot_y; |
| 1101 | + mat_rot_x.RotationX(-g_RotX / 180.0f * PI); |
| 1102 | + mat_rot_y.RotationY(-g_RotY / 180.0f * PI); |
| 1103 | + ::Effekseer::Matrix43::Multiple(mat, mat_rot_x, mat_rot_y); |
| 1104 | + ::Effekseer::Vector3D::Transform(position, position, mat); |
| 1105 | + position.X += g_focus_position.X; |
| 1106 | + position.Y += g_focus_position.Y; |
| 1107 | + position.Z += g_focus_position.Z; |
| 1108 | + |
| 1109 | + g_renderer->GetRenderer()->SetCameraMatrix(::Effekseer::Matrix44().LookAtRH(position, g_focus_position, ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f))); |
| 1110 | + |
| 1111 | + StopEffect(); |
| 1112 | + |
| 1113 | + ::Effekseer::Handle handle = g_manager->Play(g_effect, 0, 0, 0); |
| 1114 | + |
| 1115 | + for (int i = 0; i < offsetFrame; i++) |
| 1116 | + { |
| 1117 | + g_manager->Update(); |
| 1118 | + } |
| 1119 | + |
| 1120 | + FILE* fp = nullptr; |
| 1121 | + gdImagePtr img = nullptr; |
| 1122 | + |
| 1123 | + img = gdImageCreate(g_renderer->GuideWidth, g_renderer->GuideHeight); |
| 1124 | + fp = _wfopen(path, L"wb"); |
| 1125 | + gdImageGifAnimBegin(img, fp, false, 0); |
| 1126 | + |
| 1127 | + for (int32_t i = 0; i < count; i++) |
| 1128 | + { |
| 1129 | + if (!g_renderer->BeginRecord(g_renderer->GuideWidth, g_renderer->GuideHeight)) return false; |
| 1130 | + |
| 1131 | + g_renderer->SetRecordRect(0, 0); |
| 1132 | + |
| 1133 | + g_renderer->BeginRendering(); |
| 1134 | + g_manager->Draw(); |
| 1135 | + g_renderer->EndRendering(); |
| 1136 | + |
| 1137 | + for (int j = 0; j < freq; j++) |
| 1138 | + { |
| 1139 | + g_manager->Update(); |
| 1140 | + } |
| 1141 | + |
| 1142 | + std::vector<Effekseer::Color> pixels; |
| 1143 | + g_renderer->EndRecord(pixels); |
| 1144 | + |
| 1145 | + int delay = (int) round((1.0 / (double) 60.0 * freq) * 100.0); |
| 1146 | + gdImagePtr frameImage = gdImageCreateTrueColor(g_renderer->GuideWidth, g_renderer->GuideHeight); |
| 1147 | + |
| 1148 | + for (int32_t y = 0; y < g_renderer->GuideHeight; y++) |
| 1149 | + { |
| 1150 | + for (int32_t x = 0; x < g_renderer->GuideWidth; x++) |
| 1151 | + { |
| 1152 | + auto c = pixels[x + y * g_renderer->GuideWidth]; |
| 1153 | + gdImageSetPixel(frameImage, x, y, gdTrueColor(c.R, c.G, c.B)); |
| 1154 | + } |
| 1155 | + } |
| 1156 | + gdImageTrueColorToPalette(frameImage, true, gdMaxColors); |
| 1157 | + gdImageGifAnimAdd(frameImage, fp, true, 0, 0, delay, gdDisposalNone, NULL); |
| 1158 | + gdImageDestroy(frameImage); |
| 1159 | + } |
| 1160 | + |
| 1161 | + gdImageGifAnimEnd(fp); |
| 1162 | + fclose(fp); |
| 1163 | + gdImageDestroy(img); |
| 1164 | + |
| 1165 | + g_manager->StopEffect(handle); |
| 1166 | + g_manager->Update(); |
| 1167 | + return true; |
| 1168 | +} |
| 1169 | + |
1081 | 1170 | //----------------------------------------------------------------------------------
|
1082 | 1171 | //
|
1083 | 1172 | //----------------------------------------------------------------------------------
|
|
0 commit comments