Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 859 return SUB_OFFSET_FAILURE; | 859 return SUB_OFFSET_FAILURE; |
| 860 } | 860 } |
| 861 return y * bm.rowBytes() + x; | 861 return y * bm.rowBytes() + x; |
| 862 } | 862 } |
| 863 | 863 |
| 864 /** | 864 /** |
| 865 * Using the pixelRefOffset(), rowBytes(), and Config of bm, determine the (x, y) coordinate of the | 865 * Using the pixelRefOffset(), rowBytes(), and Config of bm, determine the (x, y) coordinate of the |
| 866 * upper left corner of bm relative to its SkPixelRef. | 866 * upper left corner of bm relative to its SkPixelRef. |
| 867 * x and y must be non-NULL. | 867 * x and y must be non-NULL. |
| 868 */ | 868 */ |
| 869 static bool getUpperLeftFromOffset(const SkBitmap& bm, int32_t* x, int32_t* y) { | 869 bool getUpperLeftFromOffset(SkBitmap::Config config, size_t offset, size_t rowBy tes, |
| 870 int32_t* x, int32_t* y) { | |
| 870 SkASSERT(x != NULL && y != NULL); | 871 SkASSERT(x != NULL && y != NULL); |
| 871 const size_t offset = bm.pixelRefOffset(); | |
| 872 if (0 == offset) { | 872 if (0 == offset) { |
| 873 *x = *y = 0; | 873 *x = *y = 0; |
| 874 return true; | 874 return true; |
| 875 } | 875 } |
| 876 // Use integer division to find the correct y position. | 876 // Use integer division to find the correct y position. |
| 877 *y = SkToS32(offset / bm.rowBytes()); | 877 *y = SkToS32(offset / rowBytes); |
| 878 // The remainder will be the x position, after we reverse getSubOffset. | 878 // The remainder will be the x position, after we reverse getSubOffset. |
| 879 *x = SkToS32(offset % bm.rowBytes()); | 879 *x = SkToS32(offset % rowBytes); |
| 880 switch (bm.getConfig()) { | 880 switch (config) { |
| 881 case SkBitmap::kA8_Config: | 881 case SkBitmap::kA8_Config: |
| 882 // Fall through. | 882 // Fall through. |
| 883 case SkBitmap::kIndex8_Config: | 883 case SkBitmap::kIndex8_Config: |
| 884 // x is unmodified | 884 // x is unmodified |
| 885 break; | 885 break; |
| 886 | 886 |
| 887 case SkBitmap::kRGB_565_Config: | 887 case SkBitmap::kRGB_565_Config: |
| 888 // Fall through. | 888 // Fall through. |
| 889 case SkBitmap::kARGB_4444_Config: | 889 case SkBitmap::kARGB_4444_Config: |
| 890 *x >>= 1; | 890 *x >>= 1; |
| 891 break; | 891 break; |
| 892 | 892 |
| 893 case SkBitmap::kARGB_8888_Config: | 893 case SkBitmap::kARGB_8888_Config: |
| 894 *x >>= 2; | 894 *x >>= 2; |
| 895 break; | 895 break; |
| 896 | 896 |
| 897 case SkBitmap::kNo_Config: | 897 case SkBitmap::kNo_Config: |
| 898 // Fall through. | 898 // Fall through. |
| 899 case SkBitmap::kA1_Config: | 899 case SkBitmap::kA1_Config: |
| 900 // Fall through. | 900 // Fall through. |
| 901 default: | 901 default: |
| 902 return false; | 902 return false; |
| 903 } | 903 } |
| 904 return true; | 904 return true; |
| 905 } | 905 } |
| 906 | 906 |
| 907 static bool getUpperLeftFromOffset(const SkBitmap& bm, int32_t* x, int32_t* y) { | |
|
djsollen
2013/05/21 14:10:44
according to our style guide static methods should
scroggo
2013/05/21 16:14:15
Done.
| |
| 908 return getUpperLeftFromOffset(bm.config(), bm.pixelRefOffset(), bm.rowBytes( ), x, y); | |
| 909 } | |
| 910 | |
| 907 bool SkBitmap::extractSubset(SkBitmap* result, const SkIRect& subset) const { | 911 bool SkBitmap::extractSubset(SkBitmap* result, const SkIRect& subset) const { |
| 908 SkDEBUGCODE(this->validate();) | 912 SkDEBUGCODE(this->validate();) |
| 909 | 913 |
| 910 if (NULL == result || NULL == fPixelRef) { | 914 if (NULL == result || NULL == fPixelRef) { |
| 911 return false; // no src pixels | 915 return false; // no src pixels |
| 912 } | 916 } |
| 913 | 917 |
| 914 SkIRect srcRect, r; | 918 SkIRect srcRect, r; |
| 915 srcRect.set(0, 0, this->width(), this->height()); | 919 srcRect.set(0, 0, this->width(), this->height()); |
| 916 if (!r.intersect(srcRect, subset)) { | 920 if (!r.intersect(srcRect, subset)) { |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1669 if (NULL != uri) { | 1673 if (NULL != uri) { |
| 1670 str->appendf(" uri:\"%s\"", uri); | 1674 str->appendf(" uri:\"%s\"", uri); |
| 1671 } else { | 1675 } else { |
| 1672 str->appendf(" pixelref:%p", pr); | 1676 str->appendf(" pixelref:%p", pr); |
| 1673 } | 1677 } |
| 1674 } | 1678 } |
| 1675 | 1679 |
| 1676 str->append(")"); | 1680 str->append(")"); |
| 1677 } | 1681 } |
| 1678 #endif | 1682 #endif |
| OLD | NEW |