Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Hiển thị file bmp

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Mặc định Hiển thị file bmp

    Các anh giúp em bài hiển thị file bmp này trong dos .
    Em có đọc cấu trúc của file bmp nhưng chỉ biết đọc 2 byte đầu của Bmp_header , còn phần tiếp theo en không biết phải làm gì nữa . Mong anh chị giúp đỡ .
    PHP Code:
    #include <stdio.h>

    //=============STRUCT===================
    struct BMP_HEADER
    {
        
    unsigned char bf_type[2] ;

    };
    //===========PROTOYPE=========================
    int Read_file_bmpcharname_file ) ;
    //============MAIN====================
    int main()
    {
        
    }
    //==================================
    int Read_file_bmpcharname_file )
    {
        
    BMP_HEADER bmp_header ;

        
    FILEfp =  fopenname_file" rb+ " ) ;
        if ( 
    fp == NULL 
        {
            
    printf"Unable this file %s"name_file ) ;
            return 
    ;
        }

        
    fread( & bmp_header sizeof(bmp_header) , fp ) ;
        
    fclosefp ) ;

        if ( 
    bmp_header.bf_type[0] == 'B' && bmp_header.bf_type[1] == 'M' )
            return 
    ;


  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Anh không rành C T_T, nhưng anh nghĩ em có thể tham khảo đoạn code C++ này, ý tưởng là giống nhau, em coi chỉnh lại theo cấu trúc C là ok.
    C++ Code:
    1. #include <cassert>
    2. #include <fstream>
    3. #include <iostream>
    4. #include <string>
    5.  
    6. using namespace std;
    7.  
    8. class Image
    9. {
    10. public:
    11.     Image( char* ps, int w, int h );
    12.     ~Image();
    13.     char* pixels;
    14.     int   width;
    15.     int   height;
    16. };
    17.  
    18. //Reads a bitmap image from file.
    19. Image* loadBMP( const char* filename );
    20. Image::Image( char* ps, int w, int h )
    21.     :pixels( ps ), width( w ), height( h )
    22. {   }
    23.  
    24. Image::~Image()
    25. {
    26.     delete[] pixels;
    27. }
    28.  
    29. namespace
    30. {
    31.     //Converts a four-character array to an integer, using little-endian form
    32.     int toInt(const char* bytes)
    33.     {
    34.         return ( int )( ( ( unsigned char )bytes[ 3 ] << 24 ) |
    35.                         ( ( unsigned char )bytes[ 2 ] << 16 ) |
    36.                         ( ( unsigned char )bytes[ 1 ] << 8  ) |
    37.                         ( ( unsigned char )bytes[ 0 ]       ) |
    38.                       );
    39.     }
    40.  
    41.     //Converts a two-character array to a short, using little-endian form
    42.     short toShort(const char* bytes)
    43.     {
    44.         return ( short )( ( ( unsigned char )bytes[ 1 ] << 8 ) |
    45.                           ( ( unsigned char )bytes[ 0 ]      )
    46.                         );
    47.     }
    48.  
    49.     //Reads the next four bytes as an integer, using little-endian form
    50.     int readInt( ifstream &input )
    51.     {
    52.         char buffer[ 4 ];
    53.         input.read( buffer, 4 );
    54.    
    55.         return toInt( buffer );
    56.     }
    57.  
    58.     //Reads the next two bytes as a short, using little-endian form
    59.     short readShort( ifstream &input )
    60.     {
    61.         char buffer[ 2 ];
    62.         input.read( buffer, 2 );
    63.    
    64.         return toShort( buffer );
    65.     }
    66.  
    67.     //Just like auto_ptr, but for arrays
    68.     template< class T >
    69.     class auto_array
    70.     {
    71.     private:
    72.         T* array;
    73.         mutable bool isReleased;
    74.     public:
    75.         explicit auto_array( T* array_ = NULL )
    76.             :array( array_ ), isReleased( false )
    77.         {   }
    78.  
    79.         auto_array( const auto_array< T >& aarray )
    80.         {
    81.             array = aarray.array;
    82.             isReleased = aarray.isReleased;
    83.             aarray.isReleased = true;
    84.         }
    85.  
    86.         ~auto_array()
    87.         {
    88.             if (!isReleased && array != NULL)
    89.             {
    90.                 delete[] array;
    91.             }
    92.         }
    93.  
    94.         T* get() const
    95.         {
    96.             return array;
    97.         }
    98.  
    99.         T &operator*() const
    100.         {
    101.             return *array;
    102.         }
    103.  
    104.         void operator =( const auto_array< T >& aarray )
    105.         {
    106.             if (!isReleased && array != NULL)
    107.             {
    108.                 delete[] array;
    109.             }
    110.          
    111.             array = aarray.array;
    112.             isReleased = aarray.isReleased;
    113.             aarray.isReleased = true;
    114.         }
    115.  
    116.         T* operator ->() const
    117.         {
    118.             return array;
    119.         }
    120.  
    121.         T* release()
    122.         {
    123.             isReleased = true;
    124.             return array;
    125.         }
    126.  
    127.         void reset( T* array_ = NULL )
    128.         {
    129.             if( !isReleased && array != NULL )
    130.             {
    131.                 delete[] array;
    132.             }
    133.          
    134.             array = array_;
    135.         }
    136.  
    137.         T* operator +( int i )
    138.         {
    139.             return array + i;
    140.         }
    141.  
    142.         T& operator[]( int i )
    143.         {
    144.             return array[i];
    145.         }
    146.     };
    147. }
    148.  
    149. Image* loadBMP( const char* filename )
    150. {
    151.     ifstream input;
    152.     char     buffer[2];
    153.     int      dataOffset
    154.  
    155.     input.open( filename, ifstream::binary );
    156.     assert( !input.fail() || !"Could not find file" );
    157.  
    158.     input.read(buffer, 2);
    159.     assert( buffer[ 0 ] == 'B' && buffer[ 1 ] == 'M' || !"Not a bitmap file" );
    160.  
    161.     input.ignore( 8 );
    162.  
    163.     dataOffset = readInt( input );
    164.  
    165.     //Read the header
    166.     int headerSize = readInt( input );
    167.     int width;
    168.     int height;
    169.  
    170.     switch( headerSize )
    171.     {
    172.         case 40:
    173.             width = readInt( input );
    174.             height = readInt( input );
    175.  
    176.             input.ignore( 2 );
    177.             assert( readShort( input ) == 24 || !"Image is not 24 bits per pixel" );
    178.             assert( readShort( input ) == 0 || !"Image is compressed" );
    179.             break;
    180.  
    181.         case 12:
    182.             width = readInt( input );
    183.             height = readInt( input );
    184.  
    185.             input.ignore( 2 );
    186.             assert( readShort( input ) == 24 || !"Image is not 24 bits per pixel" );
    187.             break;
    188.  
    189.         case 64:
    190.             assert( !"Can't load OS/2 V2 bitmaps" );
    191.             break;
    192.  
    193.         case 108:
    194.             assert( !"Can't load Windows V4 bitmaps" );
    195.             break;
    196.  
    197.         case 124:
    198.             assert( !"Can't load Windows V5 bitmaps" );
    199.             break;
    200.  
    201.         default:
    202.             assert( !"Unknown bitmap format" );
    203.     }
    204.  
    205.     //Read the data
    206.     auto_array< char > pixels( new char[ size ] );
    207.     auto_array< char > pixels2( new char[ width * height * 3 ] );
    208.     int                bytesPerRow = ( ( width * 3 + 3 ) / 4 ) * 4 - ( width * 3 % 4 );
    209.     int                size = bytesPerRow * height;
    210.  
    211.     input.seekg( dataOffset, ios_base::beg );
    212.     input.read( pixels.get(), size );
    213.  
    214.     for (int y = 0; y < height; y++)
    215.     {
    216.         for (int x = 0; x < width; x++)
    217.         {
    218.             for (int c = 0; c < 3; c++)
    219.             {
    220.                 pixels2[ 3 * ( width * y + x ) + c ] =
    221.                     pixels[ bytesPerRow * y + 3 * x + (2 - c) ];
    222.             }
    223.         }
    224.     }
    225.  
    226.     input.close();
    227.     return new Image( pixels2.release(), width, height );
    228. }
    229.  
    230. int main()
    231. {
    232.     Image* img;
    233.     string file_name;
    234.  
    235.     cout << "Enter your filename please :";
    236.     getline( cin, file_name );
    237.  
    238.     img = loadBMP( file_name.c_str() );
    239.  
    240.     delete img;
    241.     return 0;
    242. }
    ps : sorry em hôm bữa h bên anh là mother day T_T ( phải đi với gia đình ), nên anh không rảnh coi cho em được, khi nào anh thi xong thì anh sẽ coi kĩ hơn T_T.

Các đề tài tương tự

  1. Cách add file thư viện dll vào file exe để tạo một file chạy duy nhất C#
    Gửi bởi nthung2112 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 20
    Bài viết cuối: 01-09-2012, 10:01 AM
  2. File backup .bak có dung lương lớn hơn file .mdb và file log
    Gửi bởi MYNAM trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 27-07-2012, 12:59 PM
  3. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  4. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  5. Trả lời: 17
    Bài viết cuối: 23-05-2011, 11:47 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn