main.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. #include <main.h>
  2. #include <Fenster.h>
  3. #include <Bildschirm.h>
  4. #include <RenderThread.h>
  5. #include <DateiSystem.h>
  6. #include <Schrift.h>
  7. #include <Knopf.h>
  8. #include <DateiDialog.h>
  9. #include <Bild.h>
  10. #include <Datei.h>
  11. #include <AsynchronCall.h>
  12. #include <Fortschritt.h>
  13. using namespace Framework;
  14. Framework::Knopf *initKnopf( int x, int y, int width, int height, int style, const char *txt, Framework::Schrift *zSchrift )
  15. {
  16. Framework::Knopf *ret = new Framework::Knopf();
  17. ret->setPosition( x, y );
  18. ret->setSize( width, height );
  19. ret->setText( txt );
  20. ret->setStyle( style );
  21. ret->setMausEreignis( Framework::_ret1ME );
  22. ret->setSchriftZ( zSchrift->getThis() );
  23. return ret;
  24. }
  25. TextFeld *initTextFeld( int x, int y, int br, int hö, Schrift *zSchrift, __int64 style, char *txt )
  26. {
  27. TextFeld *ret = new TextFeld();
  28. ret->setStyle( style );
  29. ret->setSchriftZ( zSchrift->getThis() );
  30. ret->setText( txt );
  31. ret->setSchriftFarbe( 0xFFFFFFFF );
  32. ret->setSchriftSize( 12 );
  33. if( ret->hatStyle( TextFeld::Style::Buffered ) )
  34. {
  35. ret->setAlphaFeldFarbe( 0x5500FF00 );
  36. ret->setAlphaFeldStrength( -5 );
  37. }
  38. if( ret->hatStyle( TextFeld::Style::Rahmen ) )
  39. {
  40. ret->setLinienRahmenBreite( 1 );
  41. ret->setLinienRahmenFarbe( 0xFF00FF00 );
  42. }
  43. ret->setPosition( x, y );
  44. ret->setSize( br, hö );
  45. return ret;
  46. }
  47. FBalken *initFortschritt( int x, int y, int width, int height, Schrift *zSchrift )
  48. {
  49. FBalken *ret = new FBalken();
  50. ret->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::L_R );
  51. ret->setLinienRahmenFarbe( 0xFFFFFFFF );
  52. ret->setHintergrundFarbe( 0xFF005000 );
  53. ret->setFBgFarbe( 0xFF00FF00 );
  54. ret->setAktionAnzahl( 100 );
  55. ret->setSchriftZ( zSchrift->getThis() );
  56. ret->setSFarbe( 0xFFFFFFFF );
  57. ret->setSSize( 12 );
  58. ret->setSize( width, height );
  59. ret->setPosition( x, y );
  60. return ret;
  61. }
  62. BildZ *initBild( int x, int y, int width, int height )
  63. {
  64. BildZ *ret = new BildZ();
  65. ret->setStyle( BildZ::Style::Sichtbar | BildZ::Style::Alpha );
  66. ret->setPosition( x, y );
  67. ret->setSize( width, height );
  68. return ret;
  69. }
  70. TextFeld *_path;
  71. TextFeld *_start;
  72. TextFeld *_end;
  73. TextFeld *_width;
  74. TextFeld *_height;
  75. TextFeld *_targetWidth;
  76. TextFeld *_targetHeight;
  77. TextFeld *_transparent;
  78. TextFeld *_output;
  79. Knopf *_render;
  80. FBalken *_gesamtF;
  81. BildZ *_source;
  82. BildZ *_rendered;
  83. void setPath( Text *path )
  84. {
  85. Text err;
  86. Bild *img = Framework::ladeBild( path->getText(), &err );
  87. if( !img )
  88. {
  89. path->release();
  90. return;
  91. }
  92. path->ersetzen( "\\", "/" );
  93. Text *p = path->getTeilText( 0, path->positionVon( "/", path->anzahlVon( "/" ) - 1 ) );
  94. Datei d;
  95. d.setDatei( p->getText() );
  96. RCArray< Text > *list = d.getDateiListe();
  97. p->insert( 0, "Pfad: " );
  98. _path->setText( p );
  99. _start->setText( path->getTeilText( path->positionVon( "/", path->anzahlVon( "/" ) - 1 ) + 1 ) );
  100. _end->setText( list->get( list->getEintragAnzahl() - 1 ) );
  101. _width->setText( Text( "Breite: " ) += img->getBreite() );
  102. _height->setText( Text( "Höhe: " ) += img->getHeight() );
  103. _targetWidth->setText( Text( img->getBreite() ) );
  104. _targetHeight->setText( Text( img->getHeight() ) );
  105. list->release();
  106. img->release();
  107. path->release();
  108. }
  109. void renderF()
  110. {
  111. Text *type = _start->zText()->getTeilText( _start->zText()->positionVon( "." ) );
  112. int length = _start->zText()->getLength() - type->getLength();
  113. int startId = *_start->zText();
  114. int endId = *_end->zText();
  115. _gesamtF->setAktionAnzahl( endId - startId );
  116. _gesamtF->reset();
  117. LTDBDatei d;
  118. d.setDatei( _output->getText() );
  119. d.remove();
  120. d.erstellen();
  121. int bnLength = 0;
  122. for( int i = endId - startId; i > 0; i /= 26, bnLength++ );
  123. int bnIndex = 0;
  124. for( int i = startId; i <= endId; i++ )
  125. {
  126. Text fileName = i;
  127. while( fileName.getLength() < length )
  128. fileName.insert( 0, "0" );
  129. fileName.append( type->getText() );
  130. fileName.insert( 0, "/" );
  131. fileName.insert( 0, _path->zText()->getTeilText( 6 ) );
  132. Text err;
  133. Bild *source = ladeBild( fileName, &err );
  134. if( source )
  135. {
  136. int alpfaCol = TextZuInt( *_transparent->zText(), 16 );
  137. _source->setBildZ( source );
  138. Bild *rendered = new Bild();
  139. rendered->neuBild( *_targetWidth->zText(), *_targetHeight->zText(), 0 );
  140. rendered->drawBildSkall( 0, 0, rendered->getBreite(), rendered->getHeight(), *source );
  141. rendered->replaceColorWithAlpha( alpfaCol );
  142. _rendered->setBildZ( rendered->getThis() );
  143. Text bildName;
  144. for( int j = 0, tmp = bnIndex; j < bnLength; j++ )
  145. {
  146. bildName.insert( 0, 'a' + ( tmp % 26 ) );
  147. tmp /= 26;
  148. }
  149. if( d.speichern( 0, rendered, bildName.getThis() ) >= 0 )
  150. bnIndex++;
  151. }
  152. _gesamtF->aktionPlus();
  153. }
  154. _source->setBildZ( 0 );
  155. type->release();
  156. _start->addStyle( TextFeld::Style::Erlaubt );
  157. _end->addStyle( TextFeld::Style::Erlaubt );
  158. _targetWidth->addStyle( TextFeld::Style::Erlaubt );
  159. _targetHeight->addStyle( TextFeld::Style::Erlaubt );
  160. _transparent->addStyle( TextFeld::Style::Erlaubt );
  161. _output->addStyle( TextFeld::Style::Erlaubt );
  162. _render->addStyle( Knopf::Style::Erlaubt );
  163. }
  164. int Framework::Start( Framework::Startparam p )
  165. {
  166. auto fc = Framework::F_Normal( p.hinst );
  167. fc.lpszClassName = "Animation Creator";
  168. fc.lpszMenuName = "Animation Creator";
  169. WFenster *f = new WFenster();
  170. f->erstellen( WS_OVERLAPPEDWINDOW, fc );
  171. f->setNSchließAktion( []( void *p, void *f )
  172. {
  173. Framework::StopNachrichtenSchleife( ( (WFenster*)f )->getFensterHandle() );
  174. } );
  175. f->setSize( 900, 900 );
  176. f->setPosition( Punkt( 100, 100 ) );
  177. f->setMausAktion( _ret1ME );
  178. f->setTastaturAktion( _ret1TE );
  179. f->setAnzeigeModus( SW_SHOW );
  180. Bildschirm3D *screen = new Bildschirm3D( f->getThis() );
  181. f->setBildschirm( screen->getThis() );
  182. screen->update();
  183. RenderTh *renderer = new RenderTh();
  184. renderer->setBildschirm( screen->getThis() );
  185. renderer->beginn();
  186. LTDSDatei *sd = new LTDSDatei();
  187. sd->setPfad( new Text( "../Data/normal.ltds" ) );
  188. sd->leseDaten();
  189. Schrift *schrift = sd->ladeSchrift();
  190. sd->release();
  191. Knopf *k = initKnopf( 10, 10, 100, 20, Knopf::Style::Normal, "Öffnen", schrift );
  192. k->setMausEreignis( []( void *p, void *o, MausEreignis me )
  193. {
  194. if( me.id == ME_RLinks )
  195. {
  196. DateiDialog *t = new DateiDialog();
  197. t->addDateiTyp( "Alle", "*.jpg;*.png;*.bmp" );
  198. t->addDateiTyp( "Bild", "*.jpg" );
  199. t->addDateiTyp( "Bild", "*.png" );
  200. t->addDateiTyp( "Bild", "*.bmp" );
  201. Text *path = t->anzeigen( 1 );
  202. t->release();
  203. if( path )
  204. setPath( path );
  205. }
  206. return 1;
  207. } );
  208. _path = initTextFeld( 120, 10, 800, 20, schrift, TextFeld::Style::Text, "Pfad: " );
  209. TextFeld *startT = initTextFeld( 10, 40, 80, 20, schrift, TextFeld::Style::Text, "Start Bild:" );
  210. _start = initTextFeld( 90, 40, 100, 20, schrift, TextFeld::Style::TextFeld, "" );
  211. TextFeld *endT = initTextFeld( 10, 70, 80, 20, schrift, TextFeld::Style::Text, "End Bild:" );
  212. _end = initTextFeld( 90, 70, 100, 20, schrift, TextFeld::Style::TextFeld, "" );
  213. _width = initTextFeld( 220, 40, 110, 20, schrift, TextFeld::Style::Text, "Breite:" );
  214. _height = initTextFeld( 220, 70, 110, 20, schrift, TextFeld::Style::Text, "Höhe:" );
  215. TextFeld *targetWidthT = initTextFeld( 360, 40, 80, 20, schrift, TextFeld::Style::Text, "Ziel Breite:" );
  216. _targetWidth = initTextFeld( 440, 40, 60, 20, schrift, TextFeld::Style::TextFeld, "" );
  217. _targetWidth->setTastaturEreignis( _nurNummernTE );
  218. TextFeld *targetHeightT = initTextFeld( 360, 70, 80, 20, schrift, TextFeld::Style::Text, "Ziel Höhe:" );
  219. _targetHeight = initTextFeld( 440, 70, 60, 20, schrift, TextFeld::Style::TextFeld, "" );
  220. _targetHeight->setTastaturEreignis( _nurNummernTE );
  221. TextFeld *transparentT = initTextFeld( 530, 40, 120, 20, schrift, TextFeld::Style::Text, "Transparente Farbe:" );
  222. _transparent = initTextFeld( 650, 40, 80, 20, schrift, TextFeld::Style::TextFeld, "000000" );
  223. _transparent->setTastaturEreignis( _nurHexTE );
  224. TextFeld *outputT = initTextFeld( 530, 70, 120, 20, schrift, TextFeld::Style::Text, "Ausgabe Datei:" );
  225. _output = initTextFeld( 650, 70, 150, 20, schrift, TextFeld::Style::TextFeld, "annimation.ltdb" );
  226. _gesamtF = initFortschritt( 10, 100, 880, 30, schrift );
  227. _source = initBild( 30, 150, 400, 400 );
  228. _rendered = initBild( 470, 150, 400, 400 );
  229. _render = initKnopf( 760, 40, 100, 20, Knopf::Style::Normal, "Render", schrift );
  230. _render->setMausEreignis( []( void *p, void *o, MausEreignis me )
  231. {
  232. if( me.id == ME_RLinks )
  233. {
  234. _start->removeStyle( TextFeld::Style::Erlaubt );
  235. _end->removeStyle( TextFeld::Style::Erlaubt );
  236. _targetWidth->removeStyle( TextFeld::Style::Erlaubt );
  237. _targetHeight->removeStyle( TextFeld::Style::Erlaubt );
  238. _transparent->removeStyle( TextFeld::Style::Erlaubt );
  239. _output->removeStyle( TextFeld::Style::Erlaubt );
  240. _render->removeStyle( Knopf::Style::Erlaubt );
  241. new AsynchronCall( renderF );
  242. }
  243. return 1;
  244. } );
  245. screen->addMember( k );
  246. screen->addMember( _path );
  247. screen->addMember( startT );
  248. screen->addMember( _start );
  249. screen->addMember( endT );
  250. screen->addMember( _end );
  251. screen->addMember( _width );
  252. screen->addMember( _height );
  253. screen->addMember( targetWidthT );
  254. screen->addMember( _targetWidth );
  255. screen->addMember( targetHeightT );
  256. screen->addMember( _targetHeight );
  257. screen->addMember( transparentT );
  258. screen->addMember( _transparent );
  259. screen->addMember( outputT );
  260. screen->addMember( _output );
  261. screen->addMember( _render );
  262. screen->addMember( _gesamtF );
  263. screen->addMember( _source );
  264. screen->addMember( _rendered );
  265. Framework::StartNachrichtenSchleife();
  266. renderer->beenden();
  267. k->release();
  268. _path->release();
  269. startT->release();
  270. _start->release();
  271. endT->release();
  272. _end->release();
  273. _width->release();
  274. _height->release();
  275. targetWidthT->release();
  276. _targetWidth->release();
  277. targetHeightT->release();
  278. _targetHeight->release();
  279. transparentT->release();
  280. _transparent->release();
  281. schrift->release();
  282. outputT->release();
  283. _output->release();
  284. _render->release();
  285. _gesamtF->release();
  286. _source->release();
  287. _rendered->release();
  288. renderer->release();
  289. f->setBildschirm( 0 );
  290. f->release();
  291. screen->release();
  292. return 0;
  293. }