首先你要得到BMP的文件格式资料,这个可以在网上找找,然后将ondraw画的图形的数据按BMP的格式保存(可以用CFile的写函数或者MFC的永续存储的方法)。注意显示模式。

解决方案 »

  1.   

    你只需在OnDraw中建立一个与当前DC兼容的内存DC,将兼容位图选入内存DC中,向该内存DC中画后,保存内存DC中的位图即可
      

  2.   

    To:ShyWJB
    如何建立内存DC?
    兼容位图指什么?
    保存内存DC是否要重写CDocument::OnFileSave()函数?
    望赐教。
      

  3.   

    建立DC用CClientDC可以获取当前窗口客户区的DC
    兼容位图就是用CreateCompatibleBitmap函数创建的与当前DC兼容的位图。
    用CDocument函数是一定的,但是如果你没有位图格式资料你无论如何也没办法把这个位图保存成BMP的。
      

  4.   

    To:jerry2
    位图格式资料是否很复杂?不复杂,你能否告知,这分就给你了^_^
      

  5.   

    保存在磁盘上的位图必须用DIB格式。去看看MSDN中这些结构的说明,它们其实就是DIB位图文件的格式。呵呵,稍微有点烦,如果你没做过的话。建议你还是去哪找个现成的类吧。BITMAPINFO
    BITMAPINFOHEADER
    RGBQURD
      

  6.   

    以下是bitmap的文件格式结构和描述的具体说明
    bitmap-file formatswindows bitmap files are stored in a device-independent bitmap (dib) format
    that allows windows to display the bitmap on any type of display device. the
    term "device independent" means that the bitmap specifies pixel color in a
    form independent of the method used by a display to represent color. the
    default filename extension of a windows dib file is .bmp.bitmap-file structureseach bitmap file contains a bitmap-file header, a bitmap-information header,
    a color table, and an array of bytes that defines the bitmap bits. the file
    has the following form:bitmapfileheader bmfh;
    bitmapinfoheader bmih;
    rgbquad acolors[];
    byte abitmapbits[];the bitmap-file header contains information about the type, size, and layout
    of a device-independent bitmap file. the header is defined as a
    bitmapfileheader structure.the bitmap-information header, defined as a bitmapinfoheader structure,
    specifies the dimensions, compression type, and color format for the bitmap.the color table, defined as an array of rgbquad structures, contains as many
    elements as there are colors in the bitmap. the color table is not present
    for bitmaps with 24 color bits because each pixel is represented by 24-bit
    red-green-blue (rgb) values in the actual bitmap data area. the colors in the
    table should appear in order of importance. this helps a display driver
    render a bitmap on a device that cannot display as many colors as there are
    in the bitmap. if the dib is in windows version 3.0 or later format, the
    driver can use the biclrimportant member of the bitmapinfoheader structure to
    determine which colors are important.the bitmapinfo structure can be used to represent a combined
    bitmap-information header and color table. the bitmap bits, immediately
    following the color table, consist of an array of byte values representing
    consecutive rows, or "scan lines," of the bitmap. each scan line consists of
    consecutive bytes representing the pixels in the scan line, in left-to-right
    order. the number of bytes representing a scan line depends on the color
    format and the width, in pixels, of the bitmap. if necessary, a scan line
    must be zero-padded to end on a 32-bit boundary. however, segment boundaries
    can appear anywhere in the bitmap. the scan lines in the bitmap are stored
    from bottom up. this means that the first byte in the array represents the
    pixels in the lower-left corner of the bitmap and the last byte represents
    the pixels in the upper-right corner.the bibitcount member of the bitmapinfoheader structure determines the number
    of bits that define each pixel and the maximum number of colors in the
    bitmap. these members can have any of the following values:value meaning1 bitmap is monochrome and the color table contains two entries. each
    bit in the bitmap array represents a pixel. if the bit is clear, the pixel is
    displayed with the color of the first entry in the color table. if the bit is
    set, the pixel has the color of the second entry in the table.4 bitmap has a maximum of 16 colors. each pixel in the bitmap is
    represented by a 4-bit index into the color table. for example, if the first
    byte in the bitmap is 0x1f, the byte represents two pixels. the first pixel
    contains the color in the second table entry, and the second pixel contains
    the color in the sixteenth table entry.8 bitmap has a maximum of 256 colors. each pixel in the bitmap is
    represented by a 1-byte index into the color table. for example, if the first
    byte in the bitmap is 0x1f, the first pixel has the color of the
    thirty-second table entry.24 bitmap has a maximum of 2^24 colors. the bmicolors (or bmcicolors)
    member is null, and each 3-byte sequence in the bitmap array represents the
    relative intensities of red, green, and blue, respectively, for a pixel.the biclrused member of the bitmapinfoheader structure specifies the number
    of color indexes in the color table actually used by the bitmap. if the
    biclrused member is set to zero, the bitmap uses the maximum number of colors
    corresponding to the value of the bibitcount member. an alternative form of
    bitmap file uses the bitmapcoreinfo, bitmapcoreheader, and rgbtriple
    structures.bitmap compressionwindows versions 3.0 and later support run-length encoded (rle) formats for
    compressing bitmaps that use 4 bits per pixel and 8 bits per pixel.
    compression reduces the disk and memory storage required for a bitmap.compression of 8-bits-per-pixel bitmapswhen the bicompression member of the bitmapinfoheader structure is set to
    bi_rle8, the dib is compressed using a run-length encoded format for a
    256-color bitmap. this format uses two modes: encoded mode and absolute mode.
    both modes can occur anywhere throughout a single bitmap.encoded modea unit of information in encoded mode consists of two bytes. the first byte
    specifies the number of consecutive pixels to be drawn using the color index
    contained in the second byte. the first byte of the pair can be set to zero
    to indicate an escape that denotes the end of a line, the end of the bitmap,
    or a delta. the interpretation of the escape depends on the value of the
    second byte of the pair, which must be in the range 0x00 through 0x02.
    following are the meanings of the escape values that can be used in the
    second byte:second byte meaning0 end of line. 
    1 end of bitmap. 
    2 delta. the two bytes following the escape contain unsigned values
    indicating the horizontal and vertical offsets of the next pixel from the
    current position.absolute modeabsolute mode is signaled by the first byte in the pair being set to zero and
    the second byte to a value between 0x03 and 0xff. the second byte represents
    the number of bytes that follow, each of which contains the color index of a
    single pixel. each run must be aligned on a word boundary. following is an
    example of an 8-bit rle bitmap (the two-digit hexadecimal values in the
    second column represent a color index for a single pixel):compressed data expanded data03 04 04 04 04 
    05 06 06 06 06 06 06 
    00 03 45 56 67 00 45 56 67 
    02 78 78 78 
    00 02 05 01 move 5 right and 1 down 
    02 78 78 78 
    00 00 end of line 
    09 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 
    00 01 end of rle bitmap compression of 4-bits-per-pixel bitmapswhen the bicompression member of the bitmapinfoheader structure is set to
    bi_rle4, the dib is compressed using a run-length encoded format for a
    16-color bitmap. this format uses two modes: encoded mode and absolute mode.encoded modea unit of information in encoded mode consists of two bytes. the first byte
    of the pair contains the number of pixels to be drawn using the color indexes
    in the second byte.the second byte contains two color indexes, one in its high-order nibble
    (that is, its low-order 4 bits) and one in its low-order nibble.the first pixel is drawn using the color specified by the high-order nibble,
    the second is drawn using the color in the low-order nibble, the third is
    drawn with the color in the high-order nibble, and so on, until all the
    pixels specified by the first byte have been drawn.the first byte of the pair can be set to zero to indicate an escape that
    denotes the end of a line, the end of the bitmap, or a delta. the
    interpretation of the escape depends on the value of the second byte of the
    pair. in encoded mode, the second byte has a value in the range 0x00 through
    0x02. the meaning of these values is the same as for a dib with 8 bits per
    pixel.absolute modein absolute mode, the first byte contains zero, the second byte contains the
    number of color indexes that follow, and subsequent bytes contain color
    indexes in their high- and low-order nibbles, one color index for each pixel.
    each run must be aligned on a word boundary.following is an example of a 4-bit rle bitmap (the one-digit hexadecimal
    values in the second column represent a color index for a single pixel):compressed data expanded data03 04 0 4 0
    05 06 0 6 0 6 0 
    00 06 45 56 67 00 4 5 5 6 6 7 
    04 78 7 8 7 8 
    00 02 05 01 move 5 right and 1 down 
    04 78 7 8 7 8 
    00 00 end of line 
    09 1e 1 e 1 e 1 e 1 e 1 
    00 01 end of rle bitmap bitmap examplethe following example is a text dump of a 16-color bitmap (4 bits per pixel):win3dibfile
    bitmapfileheader
    type 19778
    size 3118
    reserved1 0
    reserved2 0
    offsetbits 118
    bitmapinfoheader
    size 40
    width 80
    height 75
    planes 1
    bitcount 4
    compression 0
    sizeimage 3000xpelspermeter 0
    ypelspermeter 0
    colorsused 16
    colorsimportant 16
    win3colortable
    blue green red unused
    [00000000] 84 252 84 0
    [00000001] 252 252 84 0
    [00000002] 84 84 252 0
    [00000003] 252 84 252 0
    [00000004] 84 252 252 0
    [00000005] 252 252 252 0
    [00000006] 0 0 0 0
    [00000007] 168 0 0 0
    [00000008] 0 168 0 0
    [00000009] 168 168 0 0
    [0000000a] 0 0 168 0
    [0000000b] 168 0 168 0
    [0000000c] 0 168 168 0
    [0000000d] 168 168 168 0
    [0000000e] 84 84 84 0
    [0000000f] 252 84 84 0
    image
    .
    . bitmap data
    .
      

  7.   

    同意ShyWJB(家宝)
    建立内存DC