Ignore:
Timestamp:
Aug 8, 2001, 2:06:29 PM (24 years ago)
Author:
sandervl
Message:

minor icon conversion fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/icon.cpp

    r6487 r6490  
    1 /* $Id: icon.cpp,v 1.11 2001-08-08 10:07:18 sandervl Exp $ */
     1/* $Id: icon.cpp,v 1.12 2001-08-08 12:06:29 sandervl Exp $ */
    22
    33/*
     
    3737#define CBM_INIT_W         4
    3838
    39 #if 0
    40 //******************************************************************************
    41 //******************************************************************************
    42 PBYTE ConvertWin32Icon(PBYTE presbits, DWORD dwResSize, DWORD *OS2ResSize)
    43 {
    44  WINBITMAPINFOHEADER *bmpHdr = (WINBITMAPINFOHEADER *)presbits;
    45  BITMAPFILEHEADER    *iconhdr; 
    46  BITMAPFILEHEADER    *iconhdr2;
    47  RGBQUAD *rgb;
    48  RGB     *os2rgb;
    49  int bwsize, i, colorsize, rgbsize, iconsize;
    50 
    51   bwsize   = (bmpHdr->biWidth*(bmpHdr->biHeight/2))/8;
    52   colorsize = bmpHdr->biWidth*(bmpHdr->biHeight/2);
    53   if(bmpHdr->biBitCount < 24)   
    54         rgbsize = (1<<bmpHdr->biBitCount)*sizeof(RGB);
    55   else  rgbsize = 0;
    56 
    57   switch(bmpHdr->biBitCount) {
    58         case 1:
    59                 colorsize /= 8;
    60                 break;
    61         case 4:
    62                 colorsize /= 2;
    63                 break;
    64         case 8:
    65                 break;
    66         case 16:
    67                 colorsize *= 2;
    68                 break;
    69         case 24:
    70                 colorsize *= 3;
    71                 break;
    72         case 32:
    73                 colorsize *= 4;
    74                 break;
    75   }
    76   if(bmpHdr->biSizeImage == 0 && bmpHdr->biCompression == 0) {
    77         bmpHdr->biSizeImage = bwsize + colorsize;
    78   }
    79 #if 0
    80   cout << "Icon size    : " << bmpHdr->biSizeImage << endl;
    81   cout << "Icon Width   : " << bmpHdr->biWidth << endl;
    82 //height for both the XOR and AND bitmap (color & BW)
    83   cout << "Height       : " << bmpHdr->biHeight << endl;
    84   cout << "Icon Bitcount: " << bmpHdr->biBitCount << endl;
    85   cout << "Icon Compress: " << bmpHdr->biCompression << endl;
    86 #endif
    87 
    88   //bitmapfileheader for AndXor mask + 2 RGB structs + bitmapfileheader
    89   //for color bitmap + RGB structs for all the colors
    90   //SvL, 15-3-98: 2*bwsize
    91   iconsize = 2*sizeof(BITMAPFILEHEADER) + 2*sizeof(RGB) +
    92              rgbsize + 2*bwsize + bmpHdr->biSizeImage;
    93   //There are icons without an XOR mask, so check for it
    94   if(bmpHdr->biSizeImage == colorsize) {
    95         iconsize += bwsize;
    96   }
    97   iconhdr  = (BITMAPFILEHEADER *)malloc(iconsize);
    98   iconhdr->usType        = BFT_COLORICON;
    99   iconhdr->cbSize        = sizeof(BITMAPFILEHEADER);
    100   iconhdr->xHotspot      = 0;
    101   iconhdr->yHotspot      = 0;
    102   iconhdr->offBits       = 2*sizeof(BITMAPFILEHEADER) +
    103                            2*sizeof(RGB) + rgbsize;
    104   iconhdr->bmp.cbFix     = sizeof(BITMAPINFOHEADER);
    105   iconhdr->bmp.cx        = (USHORT)bmpHdr->biWidth;
    106   iconhdr->bmp.cy        = (USHORT)bmpHdr->biHeight;
    107   iconhdr->bmp.cPlanes   = 1;
    108   iconhdr->bmp.cBitCount = 1;
    109   os2rgb                 = (RGB *)(iconhdr+1);
    110   memset(os2rgb, 0, sizeof(RGB));
    111   memset(os2rgb+1, 0xff, sizeof(RGB));
    112   iconhdr2               = (BITMAPFILEHEADER *)(os2rgb+2);
    113   iconhdr2->usType       = BFT_COLORICON;
    114   iconhdr2->cbSize       = sizeof(BITMAPFILEHEADER);
    115   iconhdr2->xHotspot     = 0;
    116   iconhdr2->yHotspot     = 0;
    117   iconhdr2->offBits      = 2*sizeof(BITMAPFILEHEADER) +
    118                            2*sizeof(RGB) + rgbsize + 2*bwsize;
    119   iconhdr2->bmp.cbFix    = sizeof(BITMAPINFOHEADER);
    120   iconhdr2->bmp.cx       = (USHORT)bmpHdr->biWidth;
    121   iconhdr2->bmp.cy       = (USHORT)(bmpHdr->biHeight/2);
    122   iconhdr2->bmp.cPlanes  = bmpHdr->biPlanes;
    123   iconhdr2->bmp.cBitCount= bmpHdr->biBitCount;
    124   os2rgb                 = (RGB *)(iconhdr2+1);
    125   rgb                    = (RGBQUAD *)(bmpHdr+1);
    126   if(bmpHdr->biBitCount < 24) {
    127         for(i=0;i<(1<<bmpHdr->biBitCount);i++) {
    128                 os2rgb->bRed   = rgb->red;
    129                 os2rgb->bBlue  = rgb->blue;
    130                 os2rgb->bGreen = rgb->green;
    131                 os2rgb++;
    132                 rgb++;
    133         }
    134   }
    135   //write 2*mono pixels + color pixels
    136   //There are icons without an XOR mask, so check for it
    137   if(bmpHdr->biSizeImage == colorsize) {
    138         memset((char *)os2rgb, 0, bwsize);
    139         memset((char *)os2rgb+bwsize, 0, bwsize);
    140         memcpy((char *)os2rgb+2*bwsize, (char *)rgb, colorsize);
    141   }
    142   else {
    143         memcpy((char *)os2rgb, (char *)rgb+colorsize, bwsize);
    144         memcpy((char *)os2rgb+bwsize, (char *)rgb+colorsize, bwsize);
    145         memcpy((char *)os2rgb+2*bwsize, (char *)rgb, colorsize);
    146   }
    147   *OS2ResSize = iconsize;
    148   return((PBYTE)iconhdr);
    149 }
    150 //******************************************************************************
    151 //******************************************************************************
    152 void FreeIcon(void *os2icon)
    153 {
    154   free(os2icon);
    155 }
    156 //******************************************************************************
    157 //******************************************************************************
    158 #endif
    15939
    16040//******************************************************************************
     
    16747  colorsize = DIB_GetDIBImageBytes(bmpHdr->biWidth, (bmpHdr->biHeight/2), bmpHdr->biBitCount);
    16848
    169   //SvL: 28-09-'98: only for <= 8
    17049  if(bmpHdr->biBitCount <= 8)
    17150        rgbsize = (1<<bmpHdr->biBitCount)*sizeof(RGB2);
     
    18463  //SvL, 3-3-98: 2*bwsize
    18564  iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) +
    186              rgbsize + 2*bwsize + bmpHdr->biSizeImage;
     65             rgbsize + 2*bwsize + colorsize;
    18766
    18867  return iconsize;
     
    226105  //SvL, 3-3-98: 2*bwsize
    227106  iconsize = 2*sizeof(BITMAPFILEHEADER2) + 2*sizeof(RGB2) +
    228              rgbsize + 2*bwsize + bmpHdr->biSizeImage;
     107             rgbsize + 2*bwsize + colorsize;
    229108
    230109  iconhdr  = (BITMAPFILEHEADER2 *)malloc(iconsize);
     
    241120  iconhdr->bmp2.cPlanes  = 1;
    242121  iconhdr->bmp2.cBitCount= 1;
     122  iconhdr->bmp2.cbImage  = 2*bwsize;
     123  iconhdr->bmp2.cclrUsed = 2;
     124  iconhdr->bmp2.cclrImportant = 2;
    243125  iconhdr->bmp2.ulCompression   = BCA_UNCOMP;
    244126  iconhdr->bmp2.ulColorEncoding = BCE_RGB;
     
    258140  iconhdr2->bmp2.cPlanes = bmpHdr->biPlanes;
    259141  iconhdr2->bmp2.cBitCount= bmpHdr->biBitCount;
     142  iconhdr2->bmp2.cbImage  = colorsize;
     143  iconhdr2->bmp2.cclrUsed = bmpHdr->biClrUsed;
     144  iconhdr2->bmp2.cclrImportant = bmpHdr->biClrImportant;
    260145  iconhdr2->bmp2.ulCompression   = BCA_UNCOMP;
    261146  iconhdr2->bmp2.ulColorEncoding = BCE_RGB;
     
    328213        rdir++;
    329214  }
    330   groupsize = groupsize+ihdr->wCount*sizeof(BITMAPARRAYFILEHEADER2);
     215  groupsize = groupsize+ihdr->wCount*(sizeof(BITMAPARRAYFILEHEADER2) - sizeof(BITMAPFILEHEADER2));
    331216  bafh    = (BITMAPARRAYFILEHEADER2 *)malloc(groupsize);
    332217  memset(bafh, 0, groupsize);
Note: See TracChangeset for help on using the changeset viewer.