00001
00017 #include "vetFrameHSV.h"
00018 #include <math.h>
00019
00020 vetFrameHSV::vetFrameHSV() : vetFrame()
00021 {
00022 INFO("vetFrameHSV::vetFrameHSV() : vetFrame() [CONTRUCTOR]")
00023 data = NULL;
00024 width = 0;
00025 height = 0;
00026 }
00027
00028 vetFrameHSV::vetFrameHSV(vetFrameHSV& img)
00034 {
00035 data = NULL;
00036 reAllocCanvas(img.width, img.height);
00037
00038 if ( width != 0 && height != 0 )
00039 memcpy(data, img.data, width * height * sizeof(PixelHSV));
00040
00041 INFO("vetFrameHSV::vetFrameHSV(vetFrameHSV& img) [CONTRUCTOR]")
00042 DEBUG(width)
00043 DEBUG(height)
00044 }
00045
00046
00047 vetFrameHSV::vetFrameHSV(vetFrameRGB96& img)
00053 {
00054 data = NULL;
00055 reAllocCanvas(img.width, img.height);
00056
00057 *this << img;
00058
00059 INFO("vetFrameHSV::vetFrameHSV(vetFrameRGB96& img) [CONTRUCTOR]")
00060 DEBUG(width)
00061 DEBUG(height)
00062 }
00063
00064 vetFrameHSV::vetFrameHSV(vetFrameGrey & img)
00070 {
00071 data = NULL;
00072 reAllocCanvas(img.width, img.height);
00073
00074 *this << img;
00075
00076 INFO("vetFrameHSV::vetFrameHSV(vetFrameRGB96& img) [CONTRUCTOR]")
00077 DEBUG(width)
00078 DEBUG(height)
00079 }
00080
00081
00082 vetFrameHSV::vetFrameHSV(unsigned int w, unsigned int h)
00091 {
00092 data = NULL;
00093 reAllocCanvas(w, h);
00094
00095 INFO("vetFrameHSV::vetFrameHSV(unsigned int w, unsigned int h) [CONTRUCTOR]")
00096 DEBUG(width)
00097 DEBUG(height)
00098 }
00099
00100
00101 vetFrameHSV::~vetFrameHSV()
00105 {
00106 if ( data != NULL )
00107 delete [] data;
00108
00109 INFO("vetFrameHSV::~vetFrameHSV() [DESTRUCTOR]")
00110 }
00111
00112 VETRESULT vetFrameHSV::reAllocCanvas(unsigned int w, unsigned int h)
00113 {
00114 if (data != NULL)
00115 delete [] data;
00116
00117 height = h;
00118 width = w;
00119 data = NULL;
00120
00121 if ( width == 0 || height == 0)
00122 return VETRET_PARAM_ERR;
00123
00124 data = new PixelHSV[width * height];
00125
00126 return VETRET_OK;
00127 }
00128
00129 VETRESULT vetFrameHSV::setBlack()
00130 {
00131 if (width == 0 || height == 0 || data == NULL)
00132 return VETRET_ILLEGAL_USE;
00133
00134 memset(data, '\0', width * height * sizeof(PixelHSV) );
00135
00136 return VETRET_OK;
00137 }
00138
00139 VETRESULT vetFrameHSV::setWhite()
00140 {
00141 if (width == 0 || height == 0 || data == NULL)
00142 return VETRET_ILLEGAL_USE;
00143
00144 memset(data, 255, width * height * sizeof(PixelHSV) );
00145
00146 return VETRET_OK;
00147 }
00148
00149
00150 VETRESULT vetFrameHSV::extractBrightness(unsigned char* buffer, unsigned int* size)
00151 {
00152 if (width == 0 || height == 0 || data == NULL)
00153 return VETRET_ILLEGAL_USE;
00154
00155 if (buffer == NULL)
00156 {
00157 if ( size == NULL)
00158 return VETRET_PARAM_ERR;
00159
00160 *size = width*height;
00161 return VETRET_OK;
00162 }
00163
00164 return VETRET_NOT_IMPLEMENTED;
00165 }
00166
00167 VETRESULT vetFrameHSV::setPixel(unsigned int x, unsigned int y, PixelHSV p)
00174 {
00175
00176 if ( x >= width || y >= height )
00177 throw "Invalid Coordinates in method vetFrameHSV::setPixel(unsigned int x, unsigned int y, PixelHSV p)";
00178
00179 data[y * width + x] = p;
00180
00181 return VETRET_OK;
00182 }
00183
00184
00185 VETRESULT vetFrameHSV::setHSV(unsigned int x, unsigned int y, unsigned short int hue, unsigned char sat, unsigned char val)
00195 {
00196
00197 if ( x >= width || y >= height )
00198 throw "Invalid Coordinates in method vetFrameHSV::setHSV(unsigned int x, unsigned int y, int hue, int sat, int val)";
00199
00200 unsigned int offset = y * width + x;
00201
00202 data[offset].hue = hue;
00203 data[offset].sat = sat;
00204 data[offset].val = val;
00205
00206 return VETRET_OK;
00207 }
00208
00209
00210 VETRESULT vetFrameHSV::setChannel(unsigned int x, unsigned int y, ChannelHSV fs, unsigned int value)
00219 {
00220
00221 if ( x >= width || y >= height )
00222 throw "Invalid Coordinates in method vetFrameHSV::setChannel(unsigned int x, unsigned int y, ChannelHSV fs, int value)";
00223
00224
00225 if (fs == HUE)
00226 data[y * width + x].hue = value;
00227 else if (fs == SAT)
00228 data[y * width + x].sat = (unsigned char)value;
00229 else if (fs == VAL)
00230 data[y * width + x].val = (unsigned char)value;
00231 else
00232 return VETRET_PARAM_ERR;
00233
00234 return VETRET_OK;
00235 }
00236
00237
00238 VETRESULT vetFrameHSV::getPixel(unsigned int x, unsigned int y, PixelHSV& p)
00247 {
00248
00249 if ( x >= width || y >= height )
00250 throw "Invalid Coordinates in method vetFrameHSV::setChannel(unsigned int x, unsigned int y, ChannelHSV fs, int value)";
00251
00252 p = data[y * width + x];
00253
00254 return VETRET_OK;
00255 }
00256
00257
00258 unsigned int vetFrameHSV::getChannel(unsigned int x, unsigned int y, ChannelHSV fs)
00267 {
00268
00269 if ( x >= width || y >= height )
00270 throw "Invalid Coordinates in method vetFrameHSV::setChannel(unsigned int x, unsigned int y, ChannelHSV fs, int value)";
00271
00272 if (fs == HUE)
00273 return (unsigned int)data[y * width + x].hue;
00274 else if (fs == SAT)
00275 return (unsigned int)data[y * width + x].sat;
00276 else if (fs == VAL)
00277 return (unsigned int)data[y * width + x].val;
00278
00279 throw "Unknown Channel in method vetFrameHSV::setChannel(unsigned int x, unsigned int y, ChannelHSV fs, int value)";
00280 }
00281
00282
00283 vetFrameHSV& vetFrameHSV::clearWith(PixelHSV& p)
00289 {
00290 DEBUGMSG("vetFrameHSV& vetFrameHSV::clearWith(PixelHSV& p)", p)
00291
00292 for (unsigned int i=0; i < width * height; i++)
00293 data[i] = p;
00294
00295 return *this;
00296 }
00297
00298
00299 vetFrameHSV& vetFrameHSV::clearChannel(ChannelHSV fs, unsigned int value)
00306 {
00307 INFO("vetFrameHSV& vetFrameHSV::clearChannel(ChannelHSV channel, unsigned int value)")
00308 DEBUG(channel)
00309 DEBUG(color)
00310
00311
00312 if (fs == HUE)
00313 {
00314 for (unsigned int i = 0; i<width*height; i++)
00315 data[i].hue = value;
00316 }
00317 else if (fs == SAT)
00318 {
00319 for (unsigned int i = 0; i<width*height; i++)
00320 data[i].sat = (unsigned char)value;
00321 }
00322 else if (fs == VAL)
00323 {
00324 for (unsigned int i = 0; i<width*height; i++)
00325 data[i].val = (unsigned char)value;
00326 }
00327
00328 return *this;
00329 }
00330
00331
00332
00333 int vetFrameHSV::setWidth(unsigned int newWidth)
00334 {
00335 if ( width != 0)
00336 return VETRET_ILLEGAL_USE;
00337
00338 width = newWidth;
00339
00340 return VETRET_OK;
00341 }
00342
00343 int vetFrameHSV::setHeight(unsigned int newHeight)
00344 {
00345 if ( height != 0)
00346 return VETRET_ILLEGAL_USE;
00347
00348 height = newHeight;
00349
00350 return VETRET_OK;
00351 }
00352
00353
00354 vetFrameHSV& vetFrameHSV::copy(vetFrameHSV& img)
00361 {
00362 INFO("vetFrameHSV& vetFrameHSV::copy(vetFrameHSV& img)")
00363
00364
00365 if (this == &img)
00366 throw "Source and Destination are same Image";
00367
00368
00369 if (width != img.width || height != img.height)
00370 throw "Difference in vetFrameHSV Dimensions";
00371
00372
00373 memcpy(data, img.data, width * height * sizeof(PixelHSV));
00374
00375 return *this;
00376 }
00377
00378
00379 vetFrameHSV& vetFrameHSV::operator += (vetFrameHSV& img)
00380 {
00381 INFO("vetFrameHSV& vetFrameHSV::operator += (vetFrameHSV& img)")
00382
00383 if (width != img.width || height != img.height)
00384 throw "Difference in vetFrameHSV Dimensions";
00385
00386 for(unsigned int i=0; i < width * height; i++)
00387 data[i] += img.data[i];
00388
00389 return *this;
00390 }
00391
00392
00393 vetFrameHSV& vetFrameHSV::operator -= (vetFrameHSV& img)
00394 {
00395 INFO("vetFrameHSV& vetFrameHSV::operator -= (vetFrameHSV& img)")
00396
00397 if (width != img.width || height != img.height)
00398 throw "Difference in vetFrameHSV Dimensions";
00399
00400 for(unsigned int i=0; i < width * height; i++)
00401 data[i] -= img.data[i];
00402
00403 return *this;
00404 }
00405
00406
00407 vetFrameHSV& vetFrameHSV::operator /= (vetFrameHSV& img)
00408 {
00409 INFO("vetFrameHSV& vetFrameHSV::operator /= (vetFrameHSV& img)")
00410
00411 if (width != img.width || height != img.height)
00412 throw "Difference in vetFrameHSV Dimensions";
00413
00414 for(unsigned int i=0; i < width * height; i++)
00415 data[i] /= img.data[i];
00416
00417 return *this;
00418 }
00419
00420
00421 vetFrameHSV& vetFrameHSV::operator *= (vetFrameHSV& img)
00422 {
00423 INFO("vetFrameHSV& vetFrameHSV::operator *= (vetFrameHSV& img)")
00424
00425 if (width != img.width || height != img.height)
00426 throw "Difference in vetFrameHSV Dimensions";
00427
00428 for(unsigned int i=0; i < width * height; i++)
00429 data[i] *= img.data[i];
00430
00431 return *this;
00432 }
00433
00434
00435
00436 vetFrameHSV& vetFrameHSV::operator >> (vetFrameRGB24& img)
00443 {
00444 INFO("vetFrameHSV& vetFrameHSV::operator >> (vetFrameRGB24& img) [pushing data]")
00445
00446 if ( width == 0 || height == 0 )
00447 throw "Cannot do that with empty image (no size)";
00448
00449
00450 if ( width != img.width || height != img.height )
00451 img.reAllocCanvas(width, height);
00452
00453 for(unsigned int cnt=0 ; cnt<width*height ; cnt++)
00454 convPixel_HSVtoRGB24(data[cnt], img.data[cnt]);
00455
00456
00457
00458 return *this;
00459 }
00460
00461 vetFrameHSV& vetFrameHSV::operator >> (vetFrameHSV& img)
00468 {
00469 INFO("vetFrameHSV& vetFrameHSV::operator >> (vetFrameHSV& img) [pushing data]")
00470
00471
00472 if (this == &img)
00473 throw "Source and Destination are same Image";
00474
00475 if ( width == 0 || height == 0 )
00476 throw "Cannot do that with empty image (no size)";
00477
00478
00479 if ( width != img.width || height != img.height )
00480 img.reAllocCanvas(width, height);
00481
00482 memcpy(img.data, data, width * height * sizeof(PixelHSV));
00483
00484 return *this;
00485 }
00486
00494 vetFrameHSV& vetFrameHSV::operator >> (vetFrameRGB96& img)
00495 {
00496 INFO("vetFrameHSV& vetFrameHSV::operator >> (vetFrameRGB96& img) [pushing data]")
00497
00498 if ( width == 0 || height == 0 )
00499 throw "Cannot do that with empty image (no size)";
00500
00501 if ( width != img.width || height != img.height )
00502 img.reAllocCanvas(width, height);
00503
00504
00505 const unsigned int size= height*width;
00506 for (unsigned int i=0; i < size; i++)
00507 convPixel_HSVtoRGB32(data[i], img.data[i]);
00508
00509 return *this;
00510 }
00511
00519 vetFrameHSV& vetFrameHSV::operator >> (vetFrameGrey& img)
00520 {
00521 INFO("vetFrameHSV& vetFrameHSV::operator >> (vetFrameGrey& img) [pushing data]")
00522
00523 if ( width == 0 || height == 0 )
00524 throw "Cannot do that with empty image (no size)";
00525
00526 if ( width != img.width || height != img.height )
00527 img.reAllocCanvas(width, height);
00528
00529 const unsigned int size= height*width;
00530 for (unsigned int i=0; i < size; i++)
00531 convPixel_HSVtoGREY( data[i], img.data[i] );
00532
00533 return *this;
00534 }
00535
00536
00537
00538 void vetFrameHSV::operator << (const vetFrameRGB24& img)
00545 {
00546 INFO("void vetFrameHSV::operator << (const vetFrameRGB24& img) [importing data]")
00547
00548 if ( img.width == 0 || img.height == 0 )
00549 throw "Cannot do that with empty image (no size)";
00550
00551 if ( width != img.width || height != img.height )
00552 reAllocCanvas(img.width, img.height);
00553
00554 const unsigned int size= height*width;
00555 for (unsigned int i=0; i < size; i++)
00556 convPixel_RGB24toHSV(img.data[i], data[i]);
00557
00558 }
00559
00560
00561 void vetFrameHSV::operator << (const vetFrameHSV& img)
00568 {
00569 INFO("void vetFrameHSV::operator << (const vetFrameHSV& img) [importing data]")
00570
00571
00572 if (this == &img)
00573 throw "Source and Destination are same Image";
00574
00575 if ( img.width == 0 || img.height == 0 )
00576 throw "Cannot do that with empty image (no size)";
00577
00578 if ( width != img.width || height != img.height )
00579 reAllocCanvas(img.width, img.height);
00580
00581 memcpy(data, img.data, width * height * sizeof(PixelHSV));
00582 }
00583
00591 void vetFrameHSV::operator << (const vetFrameRGB96& img)
00592 {
00593 INFO("void vetFrameHSV::operator << (const vetFrameRGB96& img) [importing data]")
00594
00595 if ( img.width == 0 || img.height == 0 )
00596 throw "Cannot do that with empty image (no size)";
00597
00598 if ( width != img.width || height != img.height )
00599 reAllocCanvas(img.width, img.height);
00600
00601
00602 const unsigned int size= height*width;
00603 for (unsigned int i=0; i < size; i++)
00604 convPixel_RGB32toHSV(img.data[i], data[i]);
00605
00606 }
00607
00615 void vetFrameHSV::operator << (const vetFrameGrey& img)
00616 {
00617 INFO("void vetFrameHSV::operator << (const vetFrameGrey& img) [importing data]")
00618
00619 if ( width == 0 || height == 0 || width != img.width || height != img.height )
00620 {
00621 reAllocCanvas(img.width, img.height);
00622 }
00623
00624
00625 const unsigned int size= height*width;
00626 for (unsigned int i=0; i < size; i++)
00627 convPixel_GREYtoHSV( img.data[i], data[i] );
00628
00629 }
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647 void vetFrameHSV::convPixel_RGB32toHSV (const PixelRGB96& rgb, PixelHSV& hsv)
00651 {
00652 float r = rgb[vetFrameRGB96::RED ] / 255.0;
00653 float g = rgb[vetFrameRGB96::GREEN] / 255.0;
00654 float b = rgb[vetFrameRGB96::BLUE ] / 255.0;
00655
00656 float h, s, v;
00657
00658 float mn = r, mx = r;
00659 int maxVal = 0;
00660
00661 if (g > mx) { mx = g; maxVal = 1; }
00662 if (b > mx) { mx = b; maxVal = 2; }
00663 if (g < mn) mn = g;
00664 if (b < mn) mn = b;
00665
00666 float delta = mx - mn;
00667
00668 v = mx;
00669 if (mx != 0)
00670 s = delta / mx;
00671 else {
00672 s = 0;
00673 h = 0;
00674 goto ass_end;
00675 }
00676
00677 if (s == 0.0f) {
00678 h = 0;
00679 goto ass_end;
00680 } else {
00681 switch (maxVal)
00682 {
00683 case 0: h = 0 + ( g - b ) / delta; break;
00684 case 1: h = 2 + ( b - r ) / delta; break;
00685 case 2: h = 4 + ( r - g ) / delta; break;
00686 default: h = 0 ; break ;
00687 }
00688 }
00689
00690 h *= 60;
00691 if (h < 0) h += 360;
00692
00693 ass_end:
00694
00695 hsv.hue = int (h);
00696 hsv.sat = int (s * 255);
00697 hsv.val = int (v * 255);
00698
00699 }
00700
00701 void vetFrameHSV::convPixel_HSVtoRGB32 (const PixelHSV& hsv, PixelRGB96& rgb)
00705 {
00706 int i;
00707 float f, p, q, t, hTemp;
00708
00709 float h = hsv.hue;
00710 float s = hsv.sat / 255.0;
00711 float v = hsv.val / 255.0;
00712
00713 float r, g, b;
00714
00715 if (s == 0.0 || h == -1.0) {
00716 rgb[0] = rgb[1] = rgb[2] = (int) v * 255;
00717 }
00718 hTemp = h / 60.0f;
00719 i = (int) floor(hTemp);
00720 f = hTemp - i;
00721 p = v * ( 1 - s );
00722 q = v * ( 1 - s * f );
00723 t = v * ( 1 - s * ( 1 - f ) );
00724
00725 switch (i) {
00726 case 0: r = v; g = t; b = p; break;
00727 case 1: r = q; g = v; b = p; break;
00728 case 2: r = p; g = v; b = t; break;
00729 case 3: r = p; g = q; b = v; break;
00730 case 4: r = t; g = p; b = v; break;
00731 case 5: r = v; g = p; b = q; break;
00732 default: r=0 ; g=0 ; b=0 ; break ;
00733 }
00734
00735 rgb[0] = int (r * 255);
00736 rgb[1] = int (g * 255);
00737 rgb[2] = int (b * 255);
00738
00739 }
00740
00741
00742
00743
00744 void vetFrameHSV::convPixel_RGB24toHSV (const PixelRGB24& rgb, PixelHSV& hsv)
00748 {
00749 float r = (int)rgb[vetFrameRGB96::RED ] / 255.0;
00750 float g = (int)rgb[vetFrameRGB96::GREEN] / 255.0;
00751 float b = (int)rgb[vetFrameRGB96::BLUE ] / 255.0;
00752
00753 float h, s, v;
00754
00755 float mn = r, mx = r;
00756 int maxVal = 0;
00757
00758 if (g > mx) { mx = g; maxVal = 1; }
00759 if (b > mx) { mx = b; maxVal = 2; }
00760 if (g < mn) mn = g;
00761 if (b < mn) mn = b;
00762
00763 float delta = mx - mn;
00764
00765 v = mx;
00766 if (mx != 0)
00767 s = delta / mx;
00768 else {
00769 s = 0;
00770 h = 0;
00771 goto ass_end;
00772 }
00773
00774 if (s == 0.0f) {
00775 h = 0;
00776 goto ass_end;
00777 } else {
00778 switch (maxVal)
00779 {
00780 case 0: h = 0 + ( g - b ) / delta; break;
00781 case 1: h = 2 + ( b - r ) / delta; break;
00782 case 2: h = 4 + ( r - g ) / delta; break;
00783 default: h = 0 ; break ;
00784 }
00785 }
00786
00787 h *= 60;
00788 if (h < 0) h += 360;
00789
00790 ass_end:
00791
00792 hsv.hue = int (h);
00793 hsv.sat = int (s * 255);
00794 hsv.val = int (v * 255);
00795
00796 }
00797
00798 void vetFrameHSV::convPixel_HSVtoRGB24 (const PixelHSV& hsv, PixelRGB24& rgb)
00802 {
00803 int i;
00804 float f, p, q, t, hTemp;
00805
00806 float h = hsv.hue;
00807 float s = hsv.sat / 255.0;
00808 float v = hsv.val / 255.0;
00809
00810 float r, g, b;
00811
00812 if (s == 0.0 || h == -1.0) {
00813 rgb[0] = rgb[1] = rgb[2] = (int) v * 255;
00814 }
00815 hTemp = h / 60.0f;
00816 i = (int) floor(hTemp);
00817 f = hTemp - i;
00818 p = v * ( 1 - s );
00819 q = v * ( 1 - s * f );
00820 t = v * ( 1 - s * ( 1 - f ) );
00821
00822 switch (i) {
00823 case 0: r = v; g = t; b = p; break;
00824 case 1: r = q; g = v; b = p; break;
00825 case 2: r = p; g = v; b = t; break;
00826 case 3: r = p; g = q; b = v; break;
00827 case 4: r = t; g = p; b = v; break;
00828 case 5: r = v; g = p; b = q; break;
00829 default: r=0 ; g=0 ; b=0 ; break ;
00830 }
00831
00832 rgb[0] = (unsigned char)(r * 255);
00833 rgb[1] = (unsigned char)(g * 255);
00834 rgb[2] = (unsigned char)(b * 255);
00835
00836 }
00837
00838
00839
00840
00841
00842 void vetFrameHSV::convPixel_GREYtoHSV (const PixelGrey& grey, PixelHSV& hsv)
00846 {
00847 float r = (int)grey / RED_COEF / 255.0;
00848 float g = (int)grey / GREEN_COEF / 255.0;
00849 float b = (int)grey / BLUE_COEF / 255.0;
00850
00851 float h, s, v;
00852
00853 float mn = r, mx = r;
00854 int maxVal = 0;
00855
00856 if (g > mx) { mx = g; maxVal = 1; }
00857 if (b > mx) { mx = b; maxVal = 2; }
00858 if (g < mn) mn = g;
00859 if (b < mn) mn = b;
00860
00861 float delta = mx - mn;
00862
00863 v = mx;
00864 if (mx != 0)
00865 s = delta / mx;
00866 else {
00867 s = 0;
00868 h = 0;
00869 goto ass_end;
00870 }
00871
00872 if (s == 0.0f) {
00873 h = 0;
00874 goto ass_end;
00875 } else {
00876 switch (maxVal)
00877 {
00878 case 0: h = 0 + ( g - b ) / delta; break;
00879 case 1: h = 2 + ( b - r ) / delta; break;
00880 case 2: h = 4 + ( r - g ) / delta; break;
00881 default: h = 0 ; break ;
00882 }
00883 }
00884
00885 h *= 60;
00886 if (h < 0) h += 360;
00887
00888 ass_end:
00889
00890 hsv.hue = int (h);
00891 hsv.sat = int (s * 255);
00892 hsv.val = int (v * 255);
00893
00894 }
00895
00896 void vetFrameHSV::convPixel_HSVtoGREY (const PixelHSV& hsv, PixelGrey& grey)
00900 {
00901 int i;
00902 float f, p, q, t, hTemp;
00903
00904 float h = hsv.hue;
00905 float s = hsv.sat / 255.0;
00906 float v = hsv.val / 255.0;
00907
00908 float r, g, b;
00909
00910 if (s == 0.0 || h == -1.0) {
00911 grey = (int) v * 255;
00912 }
00913 hTemp = h / 60.0f;
00914 i = (int) floor(hTemp);
00915 f = hTemp - i;
00916 p = v * ( 1 - s );
00917 q = v * ( 1 - s * f );
00918 t = v * ( 1 - s * ( 1 - f ) );
00919
00920 switch (i) {
00921 case 0: r = v; g = t; b = p; break;
00922 case 1: r = q; g = v; b = p; break;
00923 case 2: r = p; g = v; b = t; break;
00924 case 3: r = p; g = q; b = v; break;
00925 case 4: r = t; g = p; b = v; break;
00926 case 5: r = v; g = p; b = q; break;
00927 default: r=0 ; g=0 ; b=0 ; break ;
00928 }
00929
00930 grey = (PixelGrey)(r * 255 * RED_COEF + g * 255 * GREEN_COEF + b * 255 * BLUE_COEF);
00931
00932 }
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958