Import.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #pragma once
  2. #include <Bild.h>
  3. #include <Text.h>
  4. #include <Fenster.h>
  5. #include <DateiSystem.h>
  6. #include <Schrift.h>
  7. #include <Fortschritt.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #pragma comment( lib, "gdiplus.lib" )
  12. using namespace Framework;
  13. Bild *ladeBild( Text *zPfad )
  14. {
  15. Text *txt = zPfad->getTeilText( zPfad->positionVon( '.', zPfad->anzahlVon( '.' ) - 1 ) );
  16. if( !( txt->istGleich( ".bmp" ) || txt->istGleich( ".jpg" ) || txt->istGleich( ".gif" ) || txt->istGleich( ".png" ) ) )
  17. {
  18. WMessageBox( 0, new Text( "Error" ), new Text( "Die Angegebene Datei ist keine gueltige Bilddatei!" ), MB_ICONERROR );
  19. txt->release();
  20. return 0;
  21. }
  22. txt->release();
  23. wchar_t *name = new wchar_t[ zPfad->getLength() + 1 ];
  24. #pragma warning(push)
  25. #pragma warning(disable: 4996)
  26. mbstowcs( name, zPfad->getText(), zPfad->getLength() );
  27. #pragma warning(pop)
  28. name[ zPfad->getLength() ] = '\0';
  29. Gdiplus::Bitmap bitmap( name );
  30. Gdiplus::Color pix;
  31. delete[]name;
  32. Bild *ret = new Bild();
  33. ret->neuBild( bitmap.GetWidth(), bitmap.GetHeight(), 0 );
  34. int *buff = ret->getBuffer();
  35. for( unsigned int i = 0; i < bitmap.GetWidth() * bitmap.GetHeight(); i++ )
  36. {
  37. bitmap.GetPixel( i % bitmap.GetWidth(), i / bitmap.GetWidth(), &pix );
  38. buff[ i ] = pix.GetValue();
  39. }
  40. return ret;
  41. }
  42. int countVerzeichnis( Text *pfad )
  43. {
  44. int ret = 0;
  45. WIN32_FIND_DATA FData;
  46. pfad->ersetzen( '/', '\\' );
  47. if( pfad->positionVon( '\\', pfad->anzahlVon( '\\' ) - 1 ) != pfad->getLength() - 1 )
  48. pfad->append( "\\" );
  49. pfad->append( "*" );
  50. HANDLE hSearch = FindFirstFile( pfad->getText(), &FData );
  51. pfad->remove( pfad->getLength() - 1 );
  52. BOOL MoreFiles = FALSE;
  53. int cnt_dir = 0, cnt_file = 0;
  54. if( hSearch == INVALID_HANDLE_VALUE )
  55. return 0;
  56. do
  57. {
  58. Text *txt = new Text( FData.cFileName );
  59. if( FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
  60. {
  61. if( !( txt->istGleich( ".." ) || txt->istGleich( "." ) ) )
  62. {
  63. txt->insert( 0, pfad->getText() );
  64. ret += countVerzeichnis( txt->getThis() );
  65. }
  66. }
  67. else
  68. {
  69. txt->insert( 0, pfad->getText() );
  70. Text *end = txt->getTeilText( txt->positionVon( '.', txt->anzahlVon( '.' ) - 1 ) );
  71. if( end->istGleich( ".bmp" ) || end->istGleich( ".jpg" ) || end->istGleich( ".gif" ) || end->istGleich( ".png" ) )
  72. ret++;
  73. end->release();
  74. }
  75. txt->release();
  76. MoreFiles = FindNextFile( hSearch, &FData );
  77. } while( MoreFiles );
  78. FindClose( hSearch );
  79. pfad->release();
  80. return ret;
  81. }
  82. void ladeVerzeichnis( Text *pfad, Schrift *zSchrift, LTDBDatei *zDatei, FBalken *fb1, FBalken *fb2 )
  83. {
  84. WIN32_FIND_DATA FData;
  85. pfad->ersetzen( '/', '\\' );
  86. if( pfad->positionVon( '\\', pfad->anzahlVon( '\\' ) - 1 ) != pfad->getLength() - 1 )
  87. pfad->append( "\\" );
  88. pfad->append( "*" );
  89. HANDLE hSearch = FindFirstFile( pfad->getText(), &FData );
  90. pfad->remove( pfad->getLength() - 1 );
  91. BOOL MoreFiles = FALSE;
  92. int cnt_dir = 0, cnt_file = 0;
  93. if( hSearch == INVALID_HANDLE_VALUE )
  94. return;
  95. do
  96. {
  97. Text *txt = new Text( FData.cFileName );
  98. if( FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
  99. {
  100. if( !( txt->istGleich( ".." ) || txt->istGleich( "." ) ) )
  101. {
  102. txt->insert( 0, pfad->getText() );
  103. ladeVerzeichnis( txt->getThis(), zSchrift, zDatei, fb1, fb2 );
  104. }
  105. }
  106. else
  107. {
  108. txt->insert( 0, pfad->getText() );
  109. Text *end = txt->getTeilText( txt->positionVon( '.', txt->anzahlVon( '.' ) - 1 ) );
  110. if( end->istGleich( ".bmp" ) || end->istGleich( ".jpg" ) || end->istGleich( ".gif" ) || end->istGleich( ".png" ) )
  111. {
  112. zDatei->speichern( fb1, ladeBild( txt ), txt->getTeilText( txt->positionVon( '\\', txt->anzahlVon( '\\' ) - 1 ) + 1 ) );
  113. fb2->aktionPlus();
  114. }
  115. end->release();
  116. }
  117. txt->release();
  118. MoreFiles = FindNextFile( hSearch, &FData );
  119. } while( MoreFiles );
  120. FindClose( hSearch );
  121. pfad->release();
  122. }