| 579 | } |
| 580 | |
| 581 | static ax::backend::PixelFormat convertRGB8ToFormat(const unsigned char* data, |
| 582 | size_t dataLen, |
| 583 | PixelFormat format, |
| 584 | unsigned char** outData, |
| 585 | size_t* outDataLen) |
| 586 | { |
| 587 | switch (format) |
| 588 | { |
| 589 | case PixelFormat::RGBA8: |
| 590 | *outDataLen = dataLen / 3 * 4; |
| 591 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 592 | convertRGB8ToRGBA8(data, dataLen, *outData); |
| 593 | break; |
| 594 | case PixelFormat::RGB565: |
| 595 | *outDataLen = dataLen / 3 * 2; |
| 596 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 597 | convertRGB8ToRGB565(data, dataLen, *outData); |
| 598 | break; |
| 599 | case PixelFormat::RGBA4: |
| 600 | *outDataLen = dataLen / 3 * 2; |
| 601 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 602 | convertRGB8ToRGBA4(data, dataLen, *outData); |
| 603 | break; |
| 604 | case PixelFormat::RGB5A1: |
| 605 | *outDataLen = dataLen / 3 * 2; |
| 606 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 607 | convertRGB8ToRGB5A1(data, dataLen, *outData); |
| 608 | break; |
| 609 | case PixelFormat::R8: |
| 610 | *outDataLen = dataLen / 3; |
| 611 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 612 | convertRGB8ToR8(data, dataLen, *outData); |
| 613 | break; |
| 614 | case PixelFormat::RG8: |
| 615 | *outDataLen = dataLen / 3 * 2; |
| 616 | *outData = (unsigned char*)malloc(sizeof(unsigned char) * (*outDataLen)); |
| 617 | convertRGB8ToRG8(data, dataLen, *outData); |
| 618 | break; |
| 619 | default: |
| 620 | // unsupported conversion or don't need to convert |
| 621 | if (format != PixelFormat::RGB8) |
| 622 | { |
| 623 | AXLOGW( |
| 624 | "Can not convert image format PixelFormat::RGB8 to format ID:{}, we will use it's origin format " |
| 625 | "PixelFormat::RGB8", |
| 626 | static_cast<int>(format)); |
| 627 | } |
| 628 | |
| 629 | *outData = (unsigned char*)data; |
| 630 | *outDataLen = dataLen; |
| 631 | return PixelFormat::RGB8; |
| 632 | } |
| 633 | return format; |
| 634 | } |
| 635 | |
| 636 | static ax::backend::PixelFormat convertRGBA8ToFormat(const unsigned char* data, |
| 637 | size_t dataLen, |
no test coverage detected