Converts data of specified type to CvScalar
| 1521 | |
| 1522 | // Converts data of specified type to CvScalar |
| 1523 | CV_IMPL void |
| 1524 | cvRawDataToScalar( const void* data, int flags, CvScalar* scalar ) |
| 1525 | { |
| 1526 | int cn = CV_MAT_CN( flags ); |
| 1527 | |
| 1528 | assert( scalar && data ); |
| 1529 | |
| 1530 | if( (unsigned)(cn - 1) >= 4 ) |
| 1531 | CV_Error( CV_StsOutOfRange, "The number of channels must be 1, 2, 3 or 4" ); |
| 1532 | |
| 1533 | memset( scalar->val, 0, sizeof(scalar->val)); |
| 1534 | |
| 1535 | switch( CV_MAT_DEPTH( flags )) |
| 1536 | { |
| 1537 | case CV_8U: |
| 1538 | while( cn-- ) |
| 1539 | scalar->val[cn] = CV_8TO32F(((uchar*)data)[cn]); |
| 1540 | break; |
| 1541 | case CV_8S: |
| 1542 | while( cn-- ) |
| 1543 | scalar->val[cn] = CV_8TO32F(((char*)data)[cn]); |
| 1544 | break; |
| 1545 | case CV_16U: |
| 1546 | while( cn-- ) |
| 1547 | scalar->val[cn] = ((ushort*)data)[cn]; |
| 1548 | break; |
| 1549 | case CV_16S: |
| 1550 | while( cn-- ) |
| 1551 | scalar->val[cn] = ((short*)data)[cn]; |
| 1552 | break; |
| 1553 | case CV_32S: |
| 1554 | while( cn-- ) |
| 1555 | scalar->val[cn] = ((int*)data)[cn]; |
| 1556 | break; |
| 1557 | case CV_32F: |
| 1558 | while( cn-- ) |
| 1559 | scalar->val[cn] = ((float*)data)[cn]; |
| 1560 | break; |
| 1561 | case CV_64F: |
| 1562 | while( cn-- ) |
| 1563 | scalar->val[cn] = ((double*)data)[cn]; |
| 1564 | break; |
| 1565 | default: |
| 1566 | assert(0); |
| 1567 | CV_Error( CV_BadDepth, "" ); |
| 1568 | } |
| 1569 | } |
| 1570 | |
| 1571 | |
| 1572 | static double icvGetReal( const void* data, int type ) |