???? ID: 319061 - ????? ???????: 04 ?????? 2010 - ??????: 2.0

????? C# ?? ????? ?? ?? ??? ??? ?????? ?? ??? ???. GIF ????? ?????? ?? ??? ???? ????

?????? ??????This article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

?? ????? ??

??? ?? ??????? ???? | ??? ?? ??????? ????

??????

??? ?????? ??? ????????? 256 ????? ?? ?????? ?? ??? CompuServe ????????? ???????? ??????? (GIF) ?? ??????? ???? ??? ??? ???. GIF ????? ?? ??? ??????? ?????? ???? ?? ???, ???? ????? ??? ?????? ????????? ???? ?????? ??? ???????, ??System.Drawing?????? ????????????? ?? ???? ??? GIF ??????? ?? ??? ??? ?????? ?? ??? ??? ?? ??? ????. GIF ????? ?? ?? ?????? ??? ?????? ??? ????

?????? ?? ??? ????????? ????? ??? ?????? GIF ??????? ?? ????? ???? ???, ?? ??? ?? ?? ?? 256-??? ?? ????????? ?? ??? ????? ???? ?????????System.Drawing??? ??????? ???? ???

???? ?????? ???? ??. GIF ????? ?? ?????System.Drawing, ??GDI+.

???. GIF ????? ?????? 256 ????? ?? ????????? ?? ???? ???? Because color is a scarce resource in the .gif file, optimizing those colors is a commonly requested task. To affect an optimized color table, you must be able to set any arbitrary custom color table in a .gif file.

TheSystem.Drawingnamespace is primarily a wrapper around GDI+, therefore this article refers to the namespace as GDI+ unless behavior that is specific to theSystem.Drawingnamespace is discussed, in which case, the termSystem.Drawing????? ??? ???

After GDI+ modifies an????? ??? ??? GIF ???????, GDI + ?? ????? ?? ???? ???? ?? ???? writes ?? ???? ?? ??? ??? ?????? ??????? ?? ????? ???? ????? ????? ????????????? ?? ????? ??? ?? ?? ???? ??? ??? GDI + ?? (32 BPP) ??????? ????? 32 ????? ??? ?? ???? ??? ??????? ????? ?? ?? ?? ??? ????? ?? ??? ??????? GDI + 32-BPP ????????? ???? ???? ??? ?? ??? ??? ?????? ??? ?? ????

?????? GDI + ?? ??????? ?? ????????????, ????????????????? ??????? ?????? ?? ??? ?? ????? ??? ????. gif ???, 32-BPP ????????? ???? ?? ????? necessitates ??????? 32 BPP ???? ?? ??? ?? ?? GDI + ?????? ??????? ???? ??? ???????, ???????,?????????????????? ??????? GDI + ???? ??? ??????? ?????? retains ?? ?? ????? ????? ???? ?? ??? ???? ?? ????????????????? ??????? ?? ??? ?????? ??? ??? ?? ??????? ?? ???? ??? ???? ???? ??? ?? ?? ????? ?? ??? ??????????? ??? ?????? ?? ???. GIF ??????

????. GIF ????? ?? ?? ????? ??? ?????? ?? ??? ??? ??? ??

??? unmodified ??? ??????????with the GIF encoder and keep the??????color table intact; therefore, you can use this method to save a .gif file with a new color table.

The method is to copy the image data from an original???object to a temporary?????????????? ??? This temporary??????is created as an 8-BPP indexed??????, which is the pixel format that is used to save a .gif file. The??????color table is set by using theSetPalettemethod, and then the image definition is copied to the temporary??????. After you create the temporary????????? ????????? ??????? ?? ??? ?? ?? ????? ?? ???? ???Save()GIF ???????, 8-BPP ??? ?????? ?? ???????? ???? ?? ????? ??? ?????? ?? ??? ?????? ???

????? ??? ?????? ?? ??? ??? ????? ?? ??? ???. gif ??? ?????, ?? ????? ?? ???? ????:
  1. ????????? ??????????????????? ?? ????? ?? ??? ??? ???? ???? ?????.
  2. ????? ??? ?????? ??? ???????????????? ??? ?????? ?? ??? ???????? ???
  3. ?????LockBits??? ????? ?? ????????? ???? ?? ??? ???? ????? ??????? ???? ?? ??? ?????? ???
  4. ?????? ?? ??????? ???? ?? ??? ??? ??????????? ????? ?? ??? ?? ??????? ??? ????????? ?????LockBits?? ????????? ??? ??? ??????????.
  5. ?????UnLockBits??? ????? ?????? ???? ?? ????
  6. ???????????????? ??? ???? ?? ?????? ?? ??? ?? ???????????????? ????? ?? ????? ?????????? GIF ????????
  7. ?????????????? ????????? ????????.

????? ??? ?? ????? ????

????????? ???? ?? ?? ??? ??? ????? ??? ?? ?? ????? ???? ????Bitmap.Save????? ??? ?????? arbitrary ???? ?? ???. GIF ????? ????? ??? ??? ???????? ?? ??? ???????? ???? ?? ??????? ?? ???? ???????? ?? ??? ???? ???????? ??? ??????? ?? ??? ??????? opportunities ??????? loops ?? ????????? ??? ????GetPixel??????? ?????? ?? ???? ????????? ????????????? ??, ????? remarkably ???? ??? ???? ????? ??? ???? ???? ??? ?????? ????? ???? ??? ??LockBits??????? ?????? ???? ?? ????? ??? ??? ??????, ?? ??? ????? ? ????GetPixel???? ????????? ?????????????? ??????????? ?? ??????? ?? ??? ???????? ??? ?? ?? ????? ???? ???, ???? ????? ???????? ?????? ????????? ??????? ??????????

????? ?????? ????? ??? ???????? ???? ??:
  • ??? GDI +??????????? ???
  • ?????? ???? ?? ??? ????? ????
  • . GIF ????? ?? ??? ????? ?? ???????
  • ?? ???? ?? ????? ???? ?? ?? ???? ??? ???????? ??? ?? ???????? ???
?????? ???? ????? ?? ???????????????? ?? ??????? ?????? ??? ??PixelFormat.Format8BPPIndexed??????? ???????? ?? ???. GIF ????? ????? ?? ??? ????? ?? ??nColors. ????, ????? ????? ??? ?? ???? ??? ??????? ?? ???? ??? . GIF ????? ???? ?? ?? ???? ??? ?????? ?? ??? ??????? ???????????? obtains??????????????ColorPalette. ????? ??? ?? ???????? ?? ??? ??? ???? ????? ????? ?? ??????? ?? ?????????? ??????? ??? ?????? ???? ?? ????????? ???? ?? ??? ???? ???

????? ?? ???. GIF ?????, ?? 8 BPP ??????? ???? ??????????????? ?? ??? ???? ?? ???? ?? ??? ??????? ?? ??? ???????? ??? ????? ??? ??? ?? ???????? ??? loops ?? ?? ????? ???? ?? ??? ??? essentially ?????-????? TV ??? ????? ?? ??? ??? ???? ??? ??? ?????? ?????

???????? ?? ????????, ?? ??? ????? ??? ??????? ??? ?????? ?? means ??GetPixel()?? ?????? ???????????????? ?? ????? ??? ?? ????????? ??? A??????????????? ??? ?? ?? ?????????????? ?? ??????????? ????GetPixel()?????? ???

???????, ???? ???? ????? ?? ????? ???? ??????? ?? ??????? ?? ??? ?? ???? ??????? ?? ????? ?? ????LockBits()?????? ?? ??? ????????? ??? ?? ????? ?? ?? ??? interopWindows GDI DIB ????????. ?? ?? ????? ????BitBlt?????? ?? ?? ?????? ???? ?? ??? ??? GDI DIB ?????? ?? ??? HDC Gdi + ?? ????????? ????? ?? ??? ?????? ????? ????????GBitBlt?????? ??? ?? GDI abilities ?? ??? ???? ?? ????? ???? ???

?? ?? ????????????? ????????? ?????, ?? ????? ???????????? ??? ????ImageFormat.gif?????? ?? ?????? ???? ?? ????? ?? ??? ???????? ???



?? ?? 256 ????? ?? ??? GIF ?????

GDI + 1.0 ??????? ??? GIF ????? encodes ???? GDI +???????? 8 BPP ???? ???? ???????????? ????????? ???? ?? ???? ??? ?????? ???? ???? ?? ??? 8 BPP ?? ????? ????????????????? GIF ????? ??????? 8-BPP ?? ?? 256 ????? ?? ???. gif ?????? ????? ?? ??? ?????????????????? ?? ?? 256 ????? ??? ????????Palette.count????

GIF ????? ?? ???? ??? ???? ??????? ?? ??? ????? "??????"?? ???? ?? ????

???????????,ColorPalette?? ????System.Drawing.NET Framework ??? ??? ????? ?? ???????? ???? ?? ???? ????????????????? ??? ?? ???? ???? ???????? ??System.Drawing.Bitmap???? imposes ??? .NET Framework; ???????, ?? ???? ??? approach ?? ????? ???? ?? ????????????????? ???? ?? ???? ?????ColorPalette??????? 256 ?? ?? ????? ??? ????????ColorPalette.

?? ????? ???? ?? ??? ????? ??? ?? ????????? ??? ?????? ?? ???GetColorPalette. ?? ?????? ?? ?? ??????? ????? ???????????????? ???????? ????? ?? ?????? ?? ???? ?? ??? ????? ??? ??? ?????? ?? ?????? ????????????? ?? ???? ???? ???? ??? ?? ?? ??? ????? ??ColorPalette?? ??????? ??? ?? ??? ???? ?????: 256 ?????, 16 ?????, ?? ?? ??? (?????????)? ??????? ?? ??? ???????? ??? 256 ????? ?? ???? ??. GIF ????? ??? ???? ???, ??? ???????? ???? ?? ??? ?? ???? ???? ???? ?? ????? ????

?? ?? ?? ??? ?? ???? ???? ?? ??? ??? ?????? ???? ?? ????? ???, ?? ?? wasted ????? ???? ??? ?? ?????? ??? ??? ???? ??? ?????? ??? 8 ??? (2 x 2 x 2) ??? ????? ??? ?? ???. GIF ????? ???? ????? ?? ??? ?????? 16 ????? ?? ??? ??????? ???? ???? ??PixelFormat?? ??? ??????????? accomodates ????? ??? ???

8-BPP ???? ?? ??? ??????? ????????? ?? ??? ?? ????????? ????? ?? ?? ?????? ??? ??? ????????????? ?? ???? ??? ??????? ?? ???? ?? ??? computes ??????????? ??? ?? ?? ???????? GIF ????? ??????? ?? ???? ?? ????? ???? ?? ?? ??????????? ??? ?? ?? 256 ????? ?? ???. GIF ????? ????? ??? ???? ???, ?? ??????? ???? (??????, ??????? GIF ??? ??????) ?? ??? ???? ??? ?? ???? ?? ??? ??? ??????? ?? ?????????? ???? ???

GIF ??????????

????? ??? ???ColorPalette??????? ????? ?????????? ?????? ?? ????? demonstrate ???? ?? ??? GIF ???????? ??? ???? ???? ????????? ??? ???? ??? ??? ?? ????? ??? ?? ??? ?? ?????????? ????????? ??? ?? ??? ??? ????? ??? ???? ???????? ?????????? ?? ??? ??, ?????, ?????????? ??? ?? arbitrary ???? ?? ?? ?? ???? ?? ?? ???? ??? ????? ?? ?????? ????????? ?????????.

GIF ??????? ??? ????? ??? ?? ????? ???? ??ColorPalette?? ???????? ??? ?? ??? ??? ????? ?? ?? ????? ??? ??? ???? ???? ?? ?? ???????? ??? ???? ?? ??? ????????? ???? ???? ?? ???ColorPalette. ?? ???? 256 ??? ??????? ??? ?? ???? ?? on the condition ?? ??? preceeding ???????????? ????? ????? ????? ?? ???-????? ??? ?? ??? ?? ???? ???? ????? ??? ??? ?? ????? ?? ??? ???? ?? ??? ???????????? ?? ????? ???? ???? ??? ???-????? ????? ????? ?? ??? ??? ???????????? opaque ???? ???? ????

?????? ?????????? GIF/LZW

Microsoft ?? Unisys. GIF ????? ?????? ?? Unisys-????????? ???? ??????? ????? ?? Microsoft ???????? ?? ?????? ??? ????? ???????? ???? ???? LZW ??????? ?? ????? ???? ?? ??? ??? ??????? ??????? ??? ???????, ?? ??????? ??????????? ?? ?????? ???? ?? ??? Microsoft ????? ???????? ?? toolkits ?? ????? ???? ???? ?????-???? ???????? ?? ??????? ????? ?????-???? ??? ?????? ?? ??? ??? ?? ????????? ???? ?? ?? ?????? ??????? ?? ???????. gif ?????? ?? LZW ??????? ?? ????? ???? ?? ??? Unisys ???? ?? ???????? ???

LZW ??????? ?? GIF ?? ???? ??? ???????? ??????? ?? ??? Microsoft ???????? ??? ???? ????? ?? ??? ????? ???? ?????? ?? ????? ????:
193543  (http://support.microsoft.com/kb/193543/EN-US/ ) ?????: Unisys GIF ?? LZW ???????????? ??????? ???????

????? ???

protected ColorPalette GetColorPalette( uint nColors )
{
    // Assume monochrome image.
    PixelFormat     bitscolordepth = PixelFormat.Format1bppIndexed;
    ColorPalette    palette;    // The Palette we are stealing
    Bitmap          bitmap;     // The source of the stolen palette

    // Determine number of colors.
    if (nColors > 2)
        bitscolordepth = PixelFormat.Format4bppIndexed;
    if (nColors > 16)
        bitscolordepth = PixelFormat.Format8bppIndexed;

    // Make a new Bitmap object to get its Palette.
    bitmap = new Bitmap( 1, 1, bitscolordepth );

    palette = bitmap.Palette;   // Grab the palette
    
    bitmap.Dispose();           // cleanup the source Bitmap

    return palette;             // Send the palette back
}

				
protected void SaveGIFWithNewColorTable(
    Image       image,
    string      filename,
    uint        nColors,
    bool        fTransparent
    )
{

    // GIF codec supports 256 colors maximum, monochrome minimum.
    if (nColors > 256)
        nColors = 256;
    if (nColors < 2)
        nColors = 2;

    // Make a new 8-BPP indexed bitmap that is the same size as the source image.
    int   Width = image.Width;
    int   Height = image.Height;

    // Always use PixelFormat8bppIndexed because that is the color
    // table-based interface to the GIF codec.
    Bitmap  bitmap = new Bitmap(Width, 
                            Height, 
                            PixelFormat.Format8bppIndexed); 

    // Create a color palette big enough to hold the colors you want.
    ColorPalette pal = GetColorPalette(nColors);

    // Initialize a new color table with entries that are determined
    // by some optimal palette-finding algorithm; for demonstration 
    // purposes, use a grayscale.
    for (uint i = 0; i < nColors; i++)
    {
        uint Alpha = 0xFF;                      // Colors are opaque.
        uint Intensity = i*0xFF/(nColors-1);    // Even distribution. 

        // The GIF encoder makes the first entry in the palette
        // that has a ZERO alpha the transparent color in the GIF.
        // Pick the first one arbitrarily, for demonstration purposes.

        if ( i == 0 && fTransparent) // Make this color index...
            Alpha = 0;          // Transparent
    
        // Create a gray scale for demonstration purposes.
        // Otherwise, use your favorite color reduction algorithm
        // and an optimum palette for that algorithm generated here.
        // For example, a color histogram, or a median cut palette.
        pal.Entries[i] = Color.FromArgb( (int)Alpha, 
                                        (int)Intensity, 
                                        (int)Intensity, 
                                        (int)Intensity );
    }

    // Set the palette into the new Bitmap object.
    bitmap.Palette = pal;


    // Use GetPixel below to pull out the color data of Image.
    // Because GetPixel isn't defined on an Image, make a copy 
    // in a Bitmap instead. Make a new Bitmap that is the same size as the
    // image that you want to export. Or, try to
    // interpret the native pixel format of the image by using a LockBits
    // call. Use PixelFormat32BppARGB so you can wrap a Graphics  
    // around it.
    Bitmap BmpCopy = new Bitmap(Width, 
                            Height, 
                            PixelFormat.Format32bppArgb); 
    {
        Graphics g = Graphics.FromImage(BmpCopy);

        g.PageUnit = GraphicsUnit.Pixel;

        // Transfer the Image to the Bitmap
        g.DrawImage(image, 0, 0, Width, Height);

        // g goes out of scope and is marked for garbage collection.
        // Force it, just to keep things clean.
        g.Dispose();
    }

    // Lock a rectangular portion of the bitmap for writing.
    BitmapData  bitmapData;
    Rectangle   rect = new Rectangle(0, 0, Width, Height);

    bitmapData = bitmap.LockBits(
        rect,
        ImageLockMode.WriteOnly,
        PixelFormat.Format8bppIndexed);

    // Write to the temporary buffer that is provided by LockBits.
    // Copy the pixels from the source image in this loop.
    // Because you want an index, convert RGB to the appropriate
    // palette index here.
    IntPtr pixels = bitmapData.Scan0;

    unsafe 
    { 
        // Get the pointer to the image bits.
        // This is the unsafe operation.
        byte *  pBits;
        if (bitmapData.Stride > 0)
            pBits = (byte *)pixels.ToPointer();
        else
            // If the Stide is negative, Scan0 points to the last 
            // scanline in the buffer. To normalize the loop, obtain
            // a pointer to the front of the buffer that is located 
            // (Height-1) scanlines previous.
            pBits = (byte *)pixels.ToPointer() + bitmapData.Stride*(Height-1);
        uint stride = (uint)Math.Abs(bitmapData.Stride);

        for ( uint row = 0; row < Height; ++row )
        {
            for ( uint col = 0; col < Width; ++col )
            {
                // Map palette indexes for a gray scale.
                // If you use some other technique to color convert,
                // put your favorite color reduction algorithm here.
                Color     pixel;    // The source pixel.

                // The destination pixel.
                // The pointer to the color index byte of the
                // destination; this real pointer causes this
                // code to be considered unsafe.
                byte *    p8bppPixel = pBits + row*stride + col;

                pixel = BmpCopy.GetPixel((int)col, (int)row);

                // Use luminance/chrominance conversion to get grayscale.
                // Basically, turn the image into black and white TV.
                // Do not calculate Cr or Cb because you 
                // discard the color anyway.
                // Y = Red * 0.299 + Green * 0.587 + Blue * 0.114

                // This expression is best as integer math for performance,
                // however, because GetPixel listed earlier is the slowest 
                // part of this loop, the expression is left as 
                // floating point for clarity.

                double luminance = (pixel.R *0.299) +
                    (pixel.G *0.587) +
                    (pixel.B *0.114);

                // Gray scale is an intensity map from black to white.
                // Compute the index to the grayscale entry that
                // approximates the luminance, and then round the index.
                // Also, constrain the index choices by the number of
                // colors to do, and then set that pixel's index to the 
                // byte value.
                *p8bppPixel = (byte)(luminance * (nColors-1)/255 +0.5);

            } /* end loop for col */ 
        } /* end loop for row */ 
    } /* end unsafe */ 

    // To commit the changes, unlock the portion of the bitmap.  
    bitmap.UnlockBits(bitmapData);

    bitmap.Save(filename, ImageFormat.Gif);

    // Bitmap goes out of scope here and is also marked for
    // garbage collection.
    // Pal is referenced by bitmap and goes away.
    // BmpCopy goes out of scope here and is marked for garbage
    // collection. Force it, because it is probably quite large.
    // The same applies to bitmap.
    BmpCopy.Dispose();
    bitmap.Dispose();

}

				

????? ??? ?? ???? ???

Microsoft ???????????? ?????? ?? ?????? ????? ??, ???? illustration ?????? ?? ?? expressed ?? ???????, ????? ???? ?? ???, ??????? ?????? ?? ?????? ??/?? ???? ????? ???????? ?? ??? ????????? ????? ???? ????? ????? ?? ???? ????? ?? ?? ?? demonstrated ?? ??? ???????????? ???? ?? ????? ?? ???????????? ?? ???? ???? ?? ??? ????? ??? ??????? ?? ?????? ???? Microsoft ?????? ????????? ?? ????? ????????? ?? ???????????? ?? ?????? ??? ?????? ?? ???? ???, ????? ?? ?? ???????? ?? ???????? ??????????????? ?? ???? ??????? ?????????? ?? ??? ???????????? ???? ?? ??? ??????? ???? ???????
??? ?? ???????????? ????? ????? ??, ?? ?? ???? ?? ?? Microsoft ?????????? ??????? ?? Microsoft ??????? ???? ?? ?????? ????? ???? ??????? ?? ???, ????? Microsoft ??? ???? ?? ????:

Microsoft ??????? - ?????????? ????https://partner.Microsoft.com/global/30000104 (https://partner.microsoft.com/global/30000104)

Microsoft ??????? ????-HTTP://support.Microsoft.com/GP/advisoryservice (http://support.microsoft.com/gp/advisoryservice)

???? ??????? ?? ??? ?????? ??? ?? ?????? ???????? ?? ???? ??? ?? Microsoft ?? ?????? ???? ???? ?? ???? ???, ????? Microsoft ??? ???? ?? ????:HTTP://support.Microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS (http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS)

?????? ??????

?? ?? ???? ?????? ????? ?? ???????? ???? ?? ??? ?? ??? ?? ?????, ?? ???? ??? ???? ????? ?? ???? ?? ??? ??? ?????? ?? seems ??? ???? ??? ?? ??????? 1.0 ?? ?? ????? ?? ?? ???? GDIPlus ??? ?? ?? ???? ???? ??? ??? ???? ???? ?? ???? ??? ???? ??????? ?? ??? ?????"??????"????

????? ??? ????? ?????? ?? ???? ???????????. ??? ?? ?? ??????? ??????? ????????? ?????? ?????? ?? ??? ????? ?????? ?? ?? ???? ?? ?? ??? ?? ??? ???? ???? ?? ????? ???? ?????????? ???????? ???? ?? ????????? ??????? ?? ?? ?? ??? ?????? ?? ?? ??? ??? ???? ????? ???? ?? ????????????? /??????? ??????? ??? ??? ?? ?? ??? ?? ????, ??????? impliciations ??? Particular ???, ??? ???????? ??? ????????? ?? ??? ?????? ???? ??? ???? ?? ?? ??? ?? ????????? ???? ??, ?? ????? ?? ??? ???? ?? ???? ???

??????

GIF ????? ??????? ?????? ?? ???? ??? ???????? ??????? ?? ??? Microsoft ???????? ??? ???? ????? ?? ??? ????? ???? ?????? ?? ????? ????:
318343  (http://support.microsoft.com/kb/318343/EN-US/ ) ?????: GDI + GIF ????? ??? 8-BPP ?????? ????? ????? ???
??? ???? ???? ?? ???? ??? ???????? ??????? ?? ??? Microsoft ???????? ??? ???? ????? ?? ??? ????? ???? ?????? ?? ????? ????:
312119  (http://support.microsoft.com/kb/312119/EN-US/ ) PRB: ?????? ???? ?? ?????? ???? ???? ?? ???? ????

?? ????? Microsoft Visual C++ ?? ????? ???? ?? ???? ??? ???????? ??????? ?? ??? Microsoft ???????? ??? ???? ????? ?? ??? ????? ???? ?????? ?? ????? ????:
315780  (http://support.microsoft.com/kb/315780/EN-US/ ) HOWTO: ?????? ??? GIF ?? ??? ??? ?????? ?? ??? ????? GDI + ??????

????????

BPP
??????? - ????? ?? ?????? ?? ????? ????? digitized ???? ??? ??? ???????? ??????? ?? ??? ??? ?? ???????????? ???? ?? ??? ????? ???? ???? ??; ???????? ??????? ??? ??????? ??? ??? ??? ?? ????? ????? ?? ????? ???? ??? ??????? ?? generically ???????? ??????? ?????? BPP ?? 32, 24 BPP, 16 BPP, 8 BPP, 4 BPP, 1 BPP ????? ???
8 BPP
??? ??????? ?????? ?? ??? ??? ?? ???? ??? ????? ?? ????? expressed ??? ???? ??? ?????? ???????? ???-???-???? ??? (RGB) ??? ????????? ??? ?????? ??? ??? ??????????? ?? ??? ??? ????? ???? ??? ??????????? ?? ???? ??? ?? ???? ??, ??????? ??? ?????? ???? ?? ??? 256 ????? ??? ????? ???
GIF
????????? ???????? ??????? - CompuServe ?????? ????? ??? ?? ?? streamable ??? ????? ???????
RGB
???, ??? ?? ???? - ?? ????, ?? ???????????? ??? ??? ??? 3-???? triplet ?? ??? ??? ????????? each expressed.


???? ???? ???? ??:
  • Microsoft .NET Framework Software Development Kit 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Windows XP Professional
??????: 
kbdswgdi2003swept kbhowtomaster kbmt KB319061 KbMthi
???? ?????? ???????????? ?????? ????????
??????????: ?? ???? ?? ???? ??????? ?? ????? ?? Microsoft ????-?????? ?????????? ?????? ?????? ???? ??? ??. Microsoft ???? ??? ????-???????? ?? ????-???????? ????? ?????? ?? ???? ???????? ???? ?? ???? ????? ????? ??? ?? ??? ?????? ?? ???? ???? ???? ??? ????? ??. ???????, ????-???????? ???? ????? ???? ???? ???? ???. ?????, ????????, ?????-???? ?? ??????? ?? ???????? ?? ???? ???, ???? ?? ??? ?????? ???? ???? ??? ????? ??? ?? ???? ??. Microsoft ??????? ??? ???? ?? ?????? ?? ??????????, ????????? ?? ??? ?????? ?? ???? ????? ?? ???? ???????? ?? ??? ???? ????? ?? ??? ????????? ???? ??. Microsoft ????-?????? ?????????? ?? ????? ?????? ?? ?? ??? ??.
?????????? ?? ??????? ????????? ??????? ??:319061  (http://support.microsoft.com/kb/319061/en-us/ )