archive-com.com » COM » E » EFG2.COM

Total: 878

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • efg's Image Processing -- Aspect Ratio
    by a different factor Finding a method to display any rectangular picture in a TImage of any size AND preserving the aspect ratio is very desirable Materials and Equipment Software Requirements Windows 95 98 NT 2000 Delphi 3 4 5 to recompile AspectRatio EXE Hardware Requirements VGA display with high color or true color Procedure Click on the AspectRatio EXE icon to start the program The program starts with a default square bitmap Press on the Load Picture button and select a picture BMP JPG to display from the OpenPictureDialog Observe how the picture is displayed in landscape square and portrait orientations The AspectRatio program shows each picture in two different sizes of landscape square and portrait TImages If desired change the fill color for the areas that are not covered by preserving the aspect ratio Observe all possible picture types and how they are displayed TBitmap Type TImage Type Example Landscape Square Portrait Landscape Best Sunflower image above Square Best Smiley image below Portrait Best Ski Lift image below Square picture displayed in various rectangles while maintaining proper aspect ratio Portrait picture displayed in various rectangles while maintaining proper aspect ratio Discussion See the source code for complete details of how the AspectRatio program works The highlights are shown here Pressing the Load Picture button invokes the ButtonLoadPictureClick method shown in Listing 1 Listing 1 Processing Load Picture Button Click procedure TFormAspectRatio ButtonLoadPictureClick Sender TObject begin IF OpenPictureDialog Execute THEN BEGIN Bitmap Free get rid of old bitmap Bitmap LoadGraphicsFile OpenPictureDialog Filename LabelFilename Caption OpenPictureDialog Filename IntToStr Bitmap Width by IntToStr Bitmap Height pixels UpdateAllImages END end The LoadGraphicsFile routine uses a TPicture object to load a graphic of any registered file type Before the picture can be manipulated in any way it must be converted to a TBitmap as shown in Listing 2 Listing 2 Read TPicture and converting to TBitmap Based on suggestions from Anders Melander See Magnifier Lab Report FUNCTION LoadGraphicsFile CONST Filename STRING TBitmap VAR Picture TPicture BEGIN RESULT NIL IF FileExists Filename THEN BEGIN RESULT TBitmap Create TRY Picture TPicture Create TRY Picture LoadFromFile Filename Try converting picture to bitmap TRY Result Assign Picture Graphic EXCEPT Picture didn t support conversion to TBitmap Draw picture on bitmap instead RESULT Width Picture Graphic Width RESULT Height Picture Graphic Height RESULT PixelFormat pf24bit RESULT Canvas Draw 0 0 Picture Graphic END FINALLY Picture Free END EXCEPT RESULT Free RAISE END END END LoadGraphicFile LoadGraphicsFile from Listing 2 is used to create the Bitmap object in Listing 1 UpdateAllImages shown in Listing 1 displays this Bitmap object in each of the various TImages which is shown in Listing 3 Listing 3 Display Bitmap in various TImages PROCEDURE TFormAspectRatio UpdateAllImages BEGIN DisplayBitmap Bitmap ImageLandscape DisplayBitmap Bitmap ImageSquare DisplayBitmap Bitmap ImagePortrait DisplayBitmap Bitmap ImageLandscapeNarrow DisplayBitmap Bitmap ImageSquareSmall DisplayBitmap Bitmap ImagePortraitNarrow END UpdateAllImages The DisplayBitmap routine creates a new bitmap that is the same size as the target TImage Then DisplayBitmap copies the original bitmap to the new bitmap in

    Original URL path: http://www.efg2.com/Lab/ImageProcessing/AspectRatio.htm (2016-02-14)
    Open archived version from archive


  • efg's Image Processing Page
    TCombBox OnDrawItem Scanline TRGBTripleArray blur invert Clipboard CF BITMAP Clipboard HasFormat TControlCanvas cropping flip reverse FlipReverseRotate Flip top to bottom and or reverse left to right a 24 bits pixel TBitmap Three methods are Flip Reverse are compared Scanline CopyRect StretchBlt In addition to a flip and or a reverse an rotation of a multiple of 90 degrees 0 90 180 270 degrees counterclockwise is possible but only when using the Scanline method TBitmap TImage Scanline CopyRect StretchBlt Reverse Bitmap Flip Bitmap Rotate Bitmap 90 degrees Bitmap Function TRGBArray pRGBArray PixelFormat pf24bit HistoStretch Grays Using Histogram Stretching to Improve Image Contrast in a Gray Scale Image Histogram grayscale histogram stretching RGB YIQ TPicture BMP JPG GIF pixel TRGBTripleArray Scanline TBitmap TImage THistoArray TRGBHistoArray THistogram GetStatistics method GetHistogram method GetPercentileLevel method min max range mode median mean standard deviation kurtosis math unit NaN Plural function RGBTripleToY function CountColors function TBits Image Enhancement Perform on the fly flicker free gray scale image enhancement and thresholding using a palette with pf8bit bitmaps 256 gray scale pf8bit Bitmap Palettes Brightness Contrast Thresholding GetDIBColorTable SetDIBColorTable ScanLine PixelFormat LOGPALETTE PALETTEENTRY RBGQUAD Builder Magnifying Glass Demonstrate how to create a digital magnifying glass a circle or a rectangle to enlarge a small selected area of an image CopyMode cmSrcCopy cmSrcAnd Bitmap Mask CopyRect Transparent Draw Ellipse Rectangle Invalidate GetPixelFormatString IsPaletteDevice LoadGraphicsFile Magnification Factor BMP JPG WMF EMF GIF WmEraseBkgnd TIniFile MulDiv OpenPictureDialog TPicture TGraphic polymorphism Pixel Profile Show the Pixel Profile graphs for R G B Intensity H S or V from a line drawn over an image The example shows how to count the kernels of corn along a line in an image of maize corn TChart MouseDown MouseMove MouseUp XOR Rubberband Scanline RGB HSV RGB HSV Conversion Intensity TRGBTripleArray TPicture GraphicFilter RestrictCursorToDrawingArea RemoveCursorRestrictions NearLine function

    Original URL path: http://www.efg2.com/Lab/ImageProcessing/index.html (2016-02-14)
    Open archived version from archive

  • efg's ColorMask Lab Report
    an image However unless an image is quite large there may be more possible pixel color combinations than then the number of pixels in an images The actual number of distinct RGB triples in the image is displayed under the number of possible combinations of RGB values Move the mouse cursor over the image to see the original RGB values and the result of the selected color mask at the lower left Select the Enhance Contrast checkbox to see information in the lower order bits False colors are displayed when Enhance Contrast is selected but the information content of the bits can be visualized Press the All On or All Off buttons to select all or none of the color mask checkboxes To see the least significant RGB values like used in the example at the top of the page press All Off and then select the right most color mask checkboxes under the value 1 To see the most significant RGB values press All Off and then select the left most color mask checkboxes Notice the All Off button automatically selects Enhance Contrast checkbox Optional To save a masked bitmap press the Write button and save as a BMP or PNG image in Windows In Linux JPG images can also be written Discussion Pressing the Read button results in the ButtonReadClick method being called The routine LoadGraphicsFile is called to use a TPicture to load any of the registered image types Unfortunately Borland has not made this as easy in Delphi Kylix CLX as it was in Delphi VCL Borland has been a bit myopic in only supporting BMP files well and should have supported other files types such as GIF or TIFF natively long ago The following function works fine in Kylix CLX and Delphi VCL but fails using Delphi CLX to read a JPEG image I have seen various suggestions in various UseNet posts but I cannot seem to get them to work in reading JPEG images in Delphi CLX LoadGraphicsFile Create TBitmap from any format supported by TGraphic FUNCTION LoadGraphicsFile CONST Filename STRING TBitmap VAR Picture TPicture BEGIN Result NIL IF FileExists Filename THEN BEGIN Result TBitmap Create TRY Picture TPicture Create TRY Picture LoadFromFile Filename Try converting image to bitmap TRY Result Assign Picture Graphic EXCEPT Picture didn t support conversion to TBitmap Try drawing image on bitmap instead Result Width Picture Graphic Width Result Height Picture Graphic Height Result PixelFormat pf32bit Result Canvas Draw 0 0 Picture Graphic END FINALLY Picture Free END EXCEPT Result Free RAISE END END END LoadGraphicsFile When an image is loaded or after any change in the various check box selections the MaskAndDisplayBitmap method selects only the desired bits in each pixel as a new bitmap is created and displayed Note how the AdjustColor function is used to display enhanced contrast using false colors when the Enhance Contrast checkbox is selected PROCEDURE TFormColorMasks MaskAndDisplayBitmap VAR CountBlue BYTE CountGreen BYTE CountRed BYTE i INTEGER j INTEGER MaxB BYTE MaxG BYTE MaxR BYTE MinB BYTE MinG BYTE MinR BYTE RGBCount INTEGER RowIn pRGBQuadArray RowOut pRGBQuadArray Brute force approach PROCEDURE CalcStats CONST M128 M64 M32 M16 M8 M4 M2 M1 Boolean VAR Mask BYTE VAR Count BYTE BEGIN Count 0 Mask 0 IF M128 THEN BEGIN Mask Mask 128 INC Count END IF M64 THEN BEGIN Mask Mask 64 INC Count END IF M32 THEN BEGIN Mask Mask 32 INC Count END IF M16 THEN BEGIN Mask Mask 16 INC Count END IF M8 THEN BEGIN Mask Mask 8 INC Count END IF M4 THEN BEGIN Mask Mask 4 INC Count END IF M2 THEN BEGIN Mask Mask 2 INC Count END IF M1 THEN BEGIN Mask Mask 1 INC Count END END CalcStats FUNCTION AdjustColor CONST value BYTE minValue maxValue BYTE BYTE BEGIN RESULT value IF value 0 THEN BEGIN IF minValue maxValue THEN RESULT 255 ELSE RESULT 255 Integer value Integer minValue DIV Integer maxValue Integer minValue END END AdjustColor BEGIN Screen Cursor crHourGlass TRY CalcStats CheckBoxR128 Checked CheckBoxR64 Checked CheckBoxR32 Checked CheckBoxR16 Checked CheckBoxR8 Checked CheckBoxR4 Checked CheckBoxR2 Checked CheckBoxR1 Checked MaskRed CountRed CalcStats CheckBoxG128 Checked CheckBoxG64 Checked CheckBoxG32 Checked CheckBoxG16 Checked CheckBoxG8 Checked CheckBoxG4 Checked CheckBoxG2 Checked CheckBoxG1 Checked MaskGreen CountGreen CalcStats CheckBoxB128 Checked CheckBoxB64 Checked CheckBoxB32 Checked CheckBoxB16 Checked CheckBoxB8 Checked CheckBoxB4 Checked CheckBoxB2 Checked CheckBoxB1 Checked MaskBlue CountBlue LabelDecR Caption IntToStr MaskRed LabelDecG Caption IntToStr MaskGreen LabelDecB Caption IntToStr MaskBlue LabelHexR Caption IntToHex MaskRed 2 LabelHexG Caption IntToHex MaskGreen 2 LabelHexB Caption IntToHex MaskBlue 2 LabelComboR Caption IntToStr Round IntPower 2 CountRed LabelComboG Caption IntToStr Round IntPower 2 CountGreen LabelComboB Caption IntToStr Round IntPower 2 CountBlue LabelComboRGB Caption FormatFloat IntPower 2 CountRed IntPower 2 CountGreen IntPower 2 CountBlue IF Assigned MaskedBitmap THEN MaskedBitmap Free MaskedBitmap TBitmap Create MaskedBitmap PixelFormat pf32bit MaskedBitmap Width BaseBitmap Width MaskedBitmap Height BaseBitmap Height minR 255 minG 255 minB 255 maxR 0 maxG 0 maxB 0 FOR j 0 TO BaseBitmap Height 1 DO BEGIN RowIn BaseBitmap ScanLine j RowOut MaskedBitmap Scanline j FOR i 0 TO BaseBitmap Width 1 DO BEGIN apply each color mask RowOut i rgbRed RowIn i rgbRed AND MaskRed RowOut i rgbGreen RowIn i rgbGreen AND MaskGreen RowOut i rgbBlue RowIn i rgbBlue AND MaskBlue IF CheckBoxContrast Checked THEN BEGIN keep min max info before applying mask IF RowOut i rgbRed maxR THEN maxR RowOut i rgbRed ELSE BEGIN IF RowOut i rgbRed minR THEN minR RowOut i rgbRed END IF RowOut i rgbGreen maxG THEN maxG RowOut i rgbGreen ELSE BEGIN IF RowOut i rgbGreen minG THEN minG RowOut i rgbGreen END IF RowOut i rgbBlue maxB THEN maxB RowOut i rgbBlue ELSE BEGIN IF RowOut i rgbBlue minB THEN minB RowOut i rgbBlue END END END END RGBCount CountColors MaskedBitmap LabelRGBTriples Caption RGB Triples FormatFloat RGBCount IF CheckBoxContrast Checked THEN BEGIN FOR j 0 TO MaskedBitmap Height 1 DO BEGIN RowIn BaseBitmap ScanLine j RowOut MaskedBitmap Scanline j FOR i 0 TO MaskedBitmap Width 1 DO BEGIN RowOut i rgbRed AdjustColor RowIn i rgbRed AND

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/ColorMask/index.htm (2016-02-14)
    Open archived version from archive

  • efg's Chromaticity Diagrams Lab Report
    D65 Walker98 Dell all monitors except 21 Mitsubishi p n 65532 0 625 0 340 0 275 0 605 0 150 0 065 9300 K Dell E mail 12 Jan 99 SMPTE 0 630 0 340 0 310 0 595 0 155 0 070 Illuminant D65 Walker98 P22 phosphor in NEC Multisync C400 0 610 0 350 0 307 0 595 0 150 0 065 0 280 0 315 NEC98 9300 K Gamma 2 2 P22 phosphor in KDS VS19 0 625 0 340 0 285 0 605 0 150 0 065 0 281 0 311 High Brightness LEDs 0 700 0 300 0 170 0 700 0 130 0 075 0 310 0 320 Nichia Corporation Also see the Phosphor Handbook Table 2 Standard White Points Chromaticity and Color Temperature Name Color Temperature K CIE 1931 CIE 1964 Source x w y w x w y w Illuminant A 2856 0 44757 0 40745 0 4512 0 4059 Wyszecki82 p 139 Agoston87 p 103 Illuminant B 4874 0 34842 0 35161 0 3498 0 3527 Wyszecki82 p 139 Agoston87 p 103 Illuminant C 6774 0 31006 0 31616 0 3104 0 3191 Wyszecki82 p 139 Agoston87 p 103 Illuminant D65 6504 0 3127 0 3291 0 3138 0 3310 Walker98 Agoston87 p 103 Illuminant D65 6504 0 312713 0 329016 CICA98 5 3 Direct Sunlight 5335 0 3362 0 3502 Agoston87 p 103 Light from overcast sky 6500 0 3134 0 3275 Agoston87 p 103 Light from north sky on a 45 degree plane 10 000 0 2773 0 2934 Agoston87 p 103 Illuminant E 5400 1 3 1 3 1 3 1 3 Wyszecki82 p 139 Agoston87 p 103 Maxwell Triangle and Color Gamut In a Maxwell Triangle colors from three additive primaries are mixed in all possible combinations This is explained in more detail in the Maxwell Triangle Lab Report The chromaticity coordinates of the RGB phosphors define a Maxwell Triangle or gamut of the possible display colors for a CRT monitor Showing the gamut correctly for various color spaces is usually not possible on a single display monitor since the gamuts are slightly different and some of the colors cannot be accurately represented A gamut can be approximated however such as the SMPTE gamut shown below in the various Chromaticity Diagrams SMPTE Gamut in 1931 CIE xy Chromaticity Diagram SMPTE Gamut in 1960 CIE uv Chromaticity Diagram SMPTE Gamut in 1976 CIE u v Chromaticity Diagram Using the 1931 xy chromaticity coordinates for phosphors with the 1964 10 degree observer is not strictly correct but is allowed in the Chromaticity program for illustrative purposes By the way the Y of YUV is the gamma corrected brightness component of the colour the Y of the CIE XYZ model is linear un corrected brightness Both are related but they are not the same Materials and Equipment Software Requirements Windows 95 98 NT 2000 Delphi 3 4 5 Chromaticity EXE Hardware Requirements 800 by 600 display in High Color

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/Chromaticity.htm (2016-02-14)
    Open archived version from archive

  • efg's Maxwell Triangle Lab Report
    correct in 256 color mode Procedure Double click on the MaxwellTriangle EXE icon to start the program Study the x y z chromaticity coordinates by selecting or de selecting the various decile lines and by moving the cursor over the diagram to see the coordinates at the bottom of the display If desired select the Print or Save To File buttons to print the image or write it to a BMP file If desired switch between the Equilateral and Right Triangle display using the combobox Discussion The triangles to display print or to write to a file are created in routine CreateMaxwellTriangle in a square bitmap as a function of the size of the square bitmap The coordinates of the Blue Green and Red corners were calculated as follows Point Equilateral Triangle Right Triangle Blue iB 2 size 10 size jB size offset 90 size Green iG 50 size 10 size jG offset 10 size Red iR 98 size 90 size jR size offset 90 size where offset size 96 size SQRT 3 2 2 i is used as a prefix to designate the x direction j is used as a prefix to designate the y direction and the y axis is assumed to increase from top to bottom The Decile lines were formed when requested for either the equilateral or right triangle by breaking two specified sides into 10 parts To fill in the Maxwell triangle the x y z chromaticity coordinates were calculated for each pixel location The scanlines were considered from top jG to bottom jB in the bitmap For a given scanline j maximum xChromaticity j jG jB jG yChromaticity 1 maximum xChromaticity For each scanline j the i pixels range from iLeft to iRight as defined by iLeft iG xMax iB iG iRight iG xMax iR iG Note that with the right triangle since iB iG iLeft iG for all scanlines Display of right triangle with cursor at the equal energy point E 1 3 1 3 1 3 Notice that all points can be specified with only xChromaticity and yChromaticity For pixel i in scanline j xChromaticity xMax i iLeft iRight iLeft and zChromaticity 1 xChromaticity yChromaticity Now with the x y z chromaticity coordinates defined how should the R G B values be defined over the range 0 0 to 1 0 To make the point with equal energy the brightest white the following procedure is used maxFraction max xChromaticity yChromaticity zChromaticity Red xChromaticity maxFraction Green yChromaticity maxFraction Blue zChromaticity maxFraction In this way the point with chromaticity coordinates 1 3 1 3 1 3 is assigned to RGB 1 0 1 0 1 0 Multiply by 255 to convert RGB values from the range 0 0 to 1 0 to 0 to 255 Thus RGB 1 0 1 0 1 0 is the same as RGB 255 255 255 and is the equal energy point E During the OnMouseMove events which are created by moving the mouse cursor across the screen the

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/MaxwellTriangle.htm (2016-02-14)
    Open archived version from archive

  • efg's Color Mix Report
    light and pigments in Digital Image Processing but note that the CMY plate has been rotated in the book s version Materials and Equipment Software Requirements Windows 95 98 NT Delphi 3 4 to recompile ColorMix EXE Hardware Requirements 800 by 600 display in High Color or True Color Mode Procedure Double click on the ColorMix Exe icon to start the program With Additive Primaries selected in the Combobox select any or all of the colors Red Green Blue to add to the black background With Subtractive Primaries selected in the Combobox select any or all of the colors Red Green Blue to subtract from the white background If desired select the Print button to print the additive or subtractive color mix If desired select the Save to File button to write a 512 by 512 bitmap with the additive or subtractive color mix to the specified disk file Discussion Additive Colors Mixtures of Light Black Red Red Black Green Green Black Blue Blue Black Red Green Yellow Black Red Blue Magenta Black Blue Green Cyan Black Red Green Blue White Subtractive Colors Mixtures of Pigments White Red Cyan White Green Magenta White Blue Yellow White Red Green Blue White

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/ColorMix.htm (2016-02-14)
    Open archived version from archive

  • efg's Palettes and Colors -- ShowImage Lab Report
    correctly on color printers Press the Save button at any time to save the image currently being displayed A Save As dialog appears so you can save the BMP file where you want Discussion The program reads an image and interactively displays RGB composite image or R G B H S V H L S C M Y or K color planes Note that Hue from HSV matches the Hue from HLS but the Saturation from HSV is slightly different from the Saturation in HLS The OnMouseMove events for the ImageBig area report the pixel position I J coordinates as you move the cursor as well as a variety of color values for the pixel RGB coordinates are shown from 0 to 255 or 0 000 to 1 000 Hue values are shown either from 0 to 255 or from 0 to 360 degrees S V L values are shown from 0 to 255 or 0 000 to 1 000 C M Y K values are shown only in the range from 0 to 255 Intensity and Lightness are reported from 0 to 255 or from 0 000 to 1 000 Y I Q values are computed from the 0 000 to 1 000 R G B values Print the image or image plane as big image in landscape orientation or small image in portrait orientation Print the array of color spaces on single sheet Print the array of histograms on single sheet The histograms also show the following statistics minimum maximum mean standard deviation except for hue where the statistics aren t meaningful ColorLibrary PAS unit has various color conversion routines and support for creating histograms The conversions in this library are appropriate only for one way computations because of integer truncation in the final answer For reversible computations using floating point values look at the RealColorLibrary PAS file StatisticsLibrary PAS has a TDescriptiveStatistics class for calculating min max mean and standard deviation of a series of numbers Images processed by ShowImage are assumed to have a 4 3 aspect ratio e g 640 x 480 Color Space images may be stretched to fit if they have a different aspect ratio For GIF support you will need a GIF component such as TGIFImage from Anders Melander or another source Change the conditional compilation value from NOGIF to GIF and recompile once TGIFImage is installed You are responsible for any licensing with Unisys The FormCreate method updates the OpenPictureDialog s filter to add GIF to the all group as well as a separate GIF selection Images that are not 24 bits pixel bitmaps are forced to be pf24bit TBitmaps so they can be processed by this program To count the colors in a 24 bits pixel bitmap use a 2D array of TBits objects When a R G combination occurs for the first time create an array of 256 bits in the blue dimension Set bits for each R G B combination and then count the number set For most

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/ShowImage.htm (2016-02-14)
    Open archived version from archive

  • efg's Combine pf4Bit Bitmaps Lab Report
    against non conforming VGA hardware palettes provided by some video drivers mostly in Win 3 1 but occasionally showing up in your less reputable Win32 device drivers The standard 16 VGA system palette colors are supposed to be defined so that the XOR of a palette index A will give you a palette index B whose color pal B is the XOR inverse of the pal A This is critical for creating mono masks based on a single color in the bitmap The fastest way to do that is to use ternary raster ops that xor and copy bits in one pass When you use raster ops in Bitblt and so forth GDI applies the ROP to the contents of the bitmap The contents of 4 bpp and 8 bpp bitmaps are palette indices not colors So ROPs operate on palette indices rather than actual colors in those pixel formats Easy enough to justify after the explanation but completely counterintuitive The other half of this issue is that the standard VGA 16 color palette isn t identical across all VGA hardware or drivers The actual RGB values for things like fucsia or olive can vary slightly from one VGA card to the next This is fine when you re doing image stuff in memory but it s a problem when you go to write bitmaps out to a file That vendor s quirky VGA color palette will be written out with the bitmap If the vendor s quirky VGA palette is so bad that it isn t even XOR symmetric then bitmaps created on that machine will not mask correctly on that machine or any other because the palette in the 4bpp bitmap is wrong The solution we were forced to adopt in Delphi was to ignore the color information in 4bpp BMPs We always load 4bpp bitmaps to reference the current machine s VGA 16 color palette Through experimentation I discovered I could use the GetDIBColorTable API call to get the real palette attached to each of the pf4bit bitmaps Switching from GetPaletteEntries to GetDIBColorTable to get the color information allowed the program to work regardless of display mode Now that the files were being written with the correct colors the display was OK in high color mode but still wasn t right in 256 color mode The original pf4bit bitmaps were not displaying correctly since they had the standard VGA palette even though I could work with their colors correctly in forming a combined bitmap in memory The pf24bit bitmap was not displaying correctly in 256 color mode since it didn t have a palette The pf8bit bitmap did appear to be correct however The Fix Palette checkbox was added to the application so this palette issue could be seen both ways When unchecked the default Windows Delphi palette behavior can be observed But when checked new palettes are attached to each of the bitmaps for correct display Display of pf24bit bitmaps in 256 color mode has always

    Original URL path: http://www.efg2.com/Lab/Graphics/Colors/CombinePf4bit.htm (2016-02-14)
    Open archived version from archive



  •