aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2017-09-21 12:31:06 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-21 16:50:10 +0000
commit6fc5041adbc05b7dc8c48d44492ae86aac30e203 (patch)
tree654664af2cc4507ffe0a9b1847314f10560d2e1f /docs
parent8a02b0bca0905e6e151c1584b923ae288b7c5af4 (diff)
feedback
feedback from include review Docs-Preview: https://skia.org/?cl=49260 Bug: skia: 6898 Change-Id: Ic60980dfe53d14fd8c6973ef2f4dabb6b650cdd8 Reviewed-on: https://skia-review.googlesource.com/49260 Commit-Queue: Cary Clark <caryclark@skia.org> Reviewed-by: Cary Clark <caryclark@skia.org>
Diffstat (limited to 'docs')
-rw-r--r--docs/SkCanvas_Reference.bmh90
-rw-r--r--docs/SkPaint_Reference.bmh120
-rw-r--r--docs/SkPath_Reference.bmh22
-rw-r--r--docs/SkPixmap_Reference.bmh1314
-rw-r--r--docs/usingBookmaker.bmh8
5 files changed, 788 insertions, 766 deletions
diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh
index 0c86011c78..d3121ba899 100644
--- a/docs/SkCanvas_Reference.bmh
+++ b/docs/SkCanvas_Reference.bmh
@@ -982,11 +982,10 @@ ignored. Source rectangle corners are (srcX, srcY) and
#Formula
(this->imageInfo.width(), this->imageInfo.height())
##
-. Destination rectangle corners are (0, 0) and
-#Formula
-(dstInfo.width(), dstInfo.height())
-##
-. Copies each readable pixel intersecting both rectangles, without scaling,
+.
+
+Destination rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Copies each readable pixel intersecting both rectangles, without scaling,
converting to dstInfo.colorType() and dstInfo.alphaType() if required.
Pixels are readable when Device is raster, or backed by a GPU.
@@ -1078,11 +1077,10 @@ ignored. Source rectangle corners are (srcX, srcY) and
#Formula
(this->imageInfo.width(), this->imageInfo.height())
##
-. Destination rectangle are (0, 0) and
-#Formula
-(pixmap.width(), pixmap.height())
-##
-. Copies each readable pixel intersecting both rectangles, without scaling,
+.
+
+Destination rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
+Copies each readable pixel intersecting both rectangles, without scaling,
converting to pixmap.colorType() and pixmap.alphaType() if required.
Pixels are readable when Device is raster, or backed by a GPU.
@@ -1090,7 +1088,7 @@ Pixels are not readable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
-Allocates pixel storage in pixmap if needed.
+Caller must allocate pixel storage in pixmap if needed.
Pixel values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
@@ -1145,7 +1143,9 @@ ignored. Source rectangle corners are (srcX, srcY) and
#Formula
(this->imageInfo.width(), this->imageInfo.height())
##
-. Destination rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
+.
+
+Destination rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to bitmap.colorType() and bitmap.alphaType() if required.
@@ -1154,7 +1154,7 @@ Pixels are not readable when SkCanvas is returned by SkDocument::beginPage,
returned by SkPictureRecorder::beginRecording, or Canvas is the base of a utility
class like SkDumpCanvas.
-Allocates pixel storage in bitmap if needed.
+Caller must allocate pixel storage in bitmap if needed.
Bitmap values are converted only if Image_Color_Type and Image_Alpha_Type
do not match. Only pixels within both source and destination rectangles
@@ -1210,8 +1210,10 @@ Destination rectangle corners are (x, y) and
#Formula
(this->imageInfo.width(), this->imageInfo.height())
##
-. Copies each readable pixel
-intersecting both rectangles, without scaling, converting to
+.
+
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to
#Formula
this->imageInfo.colorType()
##
@@ -1237,15 +1239,8 @@ Does not copy, and returns false if:
#List
# Source and destination rectangles do not intersect. ##
-# pixels could not be converted to
-#Formula
-this->imageInfo.colorType()
-##
-or
-#Formula
-this->imageInfo.alphaType()
-##
-. ##
+# pixels could not be converted to this->imageInfo.colorType() or
+this->imageInfo.alphaType(). ##
# Canvas pixels are not writable; for instance, Canvas is document-based. ##
# rowBytes is too small to contain one row of pixels. ##
##
@@ -1278,17 +1273,16 @@ this->imageInfo.alphaType()
#Method bool writePixels(const SkBitmap& bitmap, int x, int y)
Copies rectangle from pixels to Canvas. Matrix and Clip are ignored.
-Source rectangle corners are (0, 0) and
-#Formula
-(bitmap.width(), bitmap.height())
-##
-.
+Source rectangle corners are (0, 0) and (bitmap.width(), bitmap.height()).
+
Destination rectangle corners are (x, y) and
#Formula
(this->imageInfo.width(), this->imageInfo.height())
##
-. Copies each readable pixel
-intersecting both rectangles, without scaling, converting to
+.
+
+Copies each readable pixel intersecting both rectangles, without scaling,
+converting to
#Formula
this->imageInfo.colorType()
##
@@ -1315,15 +1309,8 @@ Does not copy, and returns false if:
#List
# Source and destination rectangles do not intersect. ##
# bitmap does not have allocated pixels. ##
-# bitmap pixels could not be converted to
-#Formula
-this->imageInfo.colorType()
-##
-or
-#Formula
-this->imageInfo.alphaType()
-##
-. ##
+# bitmap pixels could not be converted to this->imageInfo.colorType() or
+this->imageInfo.alphaType(). ##
# Canvas pixels are not writable; for instance, Canvas is document based. ##
# bitmap pixels are inaccessible; for instance, bitmap wraps a texture. ##
##
@@ -1682,7 +1669,7 @@ Call restoreToCount with returned value to restore this and subsequent saves.
Draw text on an opaque background so that LCD_Text blends correctly with the
prior Layer. LCD_Text drawn on a background with transparency may result in
-incorrect banding.
+incorrect blending.
#Param bounds hint to limit the size of Layer; may be nullptr ##
#Param paint graphics state for Layer; may be nullptr ##
@@ -4760,6 +4747,7 @@ void draw(SkCanvas* canvas) {
(fXCount + 1) * (fYCount + 1)
##
.
+
Array entries correspond to the rectangular grid entries, ascending
left to right and then top to bottom.
##
@@ -5760,11 +5748,11 @@ If cullRect is outside of Clip, canvas can skip drawing.
#Param atlas Image containing sprites ##
#Param xform RSXform mappings for sprites in atlas ##
#Param tex Rect locations of sprites in atlas ##
-#Param colors Color, one per sprite, blended with sprite using Blend_Mode; may be nullptr ##
+#Param colors one per sprite, blended with sprite using Blend_Mode; may be nullptr ##
#Param count number of sprites to draw ##
#Param mode Blend_Mode combining colors and sprites ##
-#Param cullRect Rect bounds of transformed sprites for efficient clipping; may be nullptr ##
-#Param paint Paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
+#Param cullRect bounds of transformed sprites for efficient clipping; may be nullptr ##
+#Param paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
#Example
#Image 3
@@ -5801,11 +5789,11 @@ If cullRect is outside of Clip, canvas can skip drawing.
#Param atlas Image containing sprites ##
#Param xform RSXform mappings for sprites in atlas ##
#Param tex Rect locations of sprites in atlas ##
-#Param colors Color, one per sprite, blended with sprite using Blend_Mode; may be nullptr ##
+#Param colors one per sprite, blended with sprite using Blend_Mode; may be nullptr ##
#Param count number of sprites to draw ##
#Param mode Blend_Mode combining colors and sprites ##
-#Param cullRect Rect bounds of transformed sprites for efficient clipping; may be nullptr ##
-#Param paint Paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
+#Param cullRect bounds of transformed sprites for efficient clipping; may be nullptr ##
+#Param paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
#Example
#Image 3
@@ -5842,8 +5830,8 @@ If cullRect is outside of Clip, canvas can skip drawing.
#Param xform RSXform mappings for sprites in atlas ##
#Param tex Rect locations of sprites in atlas ##
#Param count number of sprites to draw ##
-#Param cullRect Rect bounds of transformed sprites for efficient clipping; may be nullptr ##
-#Param paint Paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
+#Param cullRect bounds of transformed sprites for efficient clipping; may be nullptr ##
+#Param paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
#Example
#Image 3
@@ -5878,8 +5866,8 @@ If cullRect is outside of Clip, canvas can skip drawing.
#Param xform RSXform mappings for sprites in atlas ##
#Param tex Rect locations of sprites in atlas ##
#Param count number of sprites to draw ##
-#Param cullRect Rect bounds of transformed sprites for efficient clipping; may be nullptr ##
-#Param paint Paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
+#Param cullRect bounds of transformed sprites for efficient clipping; may be nullptr ##
+#Param paint Color_Filter, Image_Filter, Blend_Mode, and so on; may be nullptr ##
#Example
#Image 3
diff --git a/docs/SkPaint_Reference.bmh b/docs/SkPaint_Reference.bmh
index 6dc3109e84..91644d8aa5 100644
--- a/docs/SkPaint_Reference.bmh
+++ b/docs/SkPaint_Reference.bmh
@@ -673,15 +673,15 @@ as the Font_Engine.
##
#Const kNormal_Hinting 2
Modifies glyph outlines to improve constrast. This is the default.
- With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
+ With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
choosing the default hinting algorithm, which is optimized for standard
gray-level rendering.
##
#Const kFull_Hinting 3
- Modifies glyph outlines for maxiumum constrast. With FreeType, this selects
- FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if kLCDRenderText_Flag is set.
- FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
- horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
+ Modifies glyph outlines for maxiumum constrast. With FreeType, this selects
+ FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if kLCDRenderText_Flag is set.
+ FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
+ horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
##
@@ -1544,7 +1544,9 @@ Glyphs to position below the preceding glyph.
Skia can translate text character codes as a series of Glyphs, but does not implement
font substitution,
textual substitution, line layout, or contextual spacing like Kerning pairs. Use
-a text shaping engine like #A HarfBuzz # http://harfbuzz.org/ ## to translate text runs
+a text shaping engine like
+#A HarfBuzz # http://harfbuzz.org/ ##
+ to translate text runs
into glyph series.
Vertical_Text is clear if text is drawn left to right or set if drawn from top to bottom.
@@ -2380,6 +2382,7 @@ Here are some miter limits and the angles that triggers them.
kLast_Cap = kSquare_Cap,
kDefault_Cap = kButt_Cap,
};
+
static constexpr int kCapCount = kLast_Cap + 1;
##
@@ -2523,6 +2526,7 @@ the following curve, the pair of curves meet at Stroke_Join.
kLast_Join = kBevel_Join,
kDefault_Join = kMiter_Join,
};
+
static constexpr int kJoinCount = kLast_Join + 1;
##
@@ -2839,7 +2843,7 @@ void draw(SkCanvas* canvas) {
Optional colors used when filling a path, such as a gradient.
Sets Shader to shader, decreasing Reference_Count of the previous Shader.
- Does not alter shader Reference_Count.
+ Increments shader Reference_Count by one.
#Param shader how geometry is filled with color; if nullptr, Color is used instead ##
@@ -2930,9 +2934,10 @@ void draw(SkCanvas* canvas) {
#Method void setColorFilter(sk_sp<SkColorFilter> colorFilter)
- Sets Color_Filter to filter, decreasing Reference_Count of the previous Color_Filter.
- Pass nullptr to clear Color_Filter.
- Does not alter filter Reference_Count.
+Sets Color_Filter to filter, decreasing Reference_Count of the previous
+Color_Filter. Pass nullptr to clear Color_Filter.
+
+Increments filter Reference_Count by one.
#Param colorFilter Color_Filter to apply to subsequent draw ##
@@ -3119,10 +3124,10 @@ If Paint has no Path_Effect, the path geometry is unaltered when filled or strok
#Method void setPathEffect(sk_sp<SkPathEffect> pathEffect)
- Sets Path_Effect to pathEffect,
- decreasing Reference_Count of the previous Path_Effect.
- Pass nullptr to leave the path geometry unaltered.
- Does not alter pathEffect Reference_Count.
+Sets Path_Effect to pathEffect, decreasing Reference_Count of the previous
+Path_Effect. Pass nullptr to leave the path geometry unaltered.
+
+Increments pathEffect Reference_Count by one.
#Param pathEffect replace Path with a modification when drawn ##
@@ -3143,8 +3148,10 @@ If Paint has no Path_Effect, the path geometry is unaltered when filled or strok
Mask_Filter uses coverage of the shape drawn to create Mask_Alpha.
Mask_Filter operates at a lower level than Rasterizer; Mask_Filter takes a Mask,
and returns a Mask.
-Mask_Filter may change the geometry and transparency of the shape, such as creating a blur effect.
-Set Mask_Filter to nullptr to prevent Mask_Filter from modifying the draw.
+
+Mask_Filter may change the geometry and transparency of the shape, such as
+creating a blur effect. Set Mask_Filter to nullptr to prevent Mask_Filter from
+modifying the draw.
#Example
void draw(SkCanvas* canvas) {
@@ -3180,6 +3187,7 @@ Set Mask_Filter to nullptr to prevent Mask_Filter from modifying the draw.
#Method sk_sp<SkMaskFilter> refMaskFilter() const
Returns Mask_Filter if set, or nullptr.
+
Increases Mask_Filter Reference_Count by one.
#Return Mask_Filter if previously set, nullptr otherwise ##
@@ -3203,11 +3211,12 @@ Set Mask_Filter to nullptr to prevent Mask_Filter from modifying the draw.
#Method void setMaskFilter(sk_sp<SkMaskFilter> maskFilter)
- Sets Mask_Filter to maskFilter,
- decreasing Reference_Count of the previous Mask_Filter.
- Pass nullptr to clear Mask_Filter and leave Mask_Filter effect on Mask_Alpha unaltered.
- Does not affect Rasterizer.
- Does not alter maskFilter Reference_Count.
+Sets Mask_Filter to maskFilter, decreasing Reference_Count of the previous
+Mask_Filter. Pass nullptr to clear Mask_Filter and leave Mask_Filter effect on
+Mask_Alpha unaltered.
+
+Does not affect Rasterizer.
+Increments maskFilter Reference_Count by one.
#Param maskFilter modifies clipping mask generated from drawn geometry ##
@@ -3249,7 +3258,7 @@ implementation.
#Method SkTypeface* getTypeface() const
Returns Typeface if set, or nullptr.
- Does not alter Typeface Reference_Count.
+ Increments Typeface Reference_Count by one.
#Return Typeface if previously set, nullptr otherwise ##
@@ -3298,10 +3307,9 @@ implementation.
#Method void setTypeface(sk_sp<SkTypeface> typeface)
- Sets Typeface to typeface,
- decreasing Reference_Count of the previous Typeface.
- Pass nullptr to clear Typeface and use the default typeface.
- Does not alter typeface Reference_Count.
+Sets Typeface to typeface, decreasing Reference_Count of the previous Typeface.
+Pass nullptr to clear Typeface and use the default typeface. Increments
+typeface Reference_Count by one.
#Param typeface font and style used to draw text ##
@@ -3325,9 +3333,11 @@ implementation.
Rasterizer controls how shapes are converted to Mask_Alpha.
Rasterizer operates at a higher level than Mask_Filter; Rasterizer takes a Path,
and returns a Mask.
+
Rasterizer may change the geometry and transparency of the shape, such as
creating a shadow effect. Rasterizer forms the base of Rasterizer_Layer, which
creates effects like embossing and outlining.
+
Rasterizer applies to Rect, Region, Round_Rect, Arcs, Circles, Ovals,
Path, and Text.
@@ -3415,11 +3425,12 @@ Path, and Text.
#Method void setRasterizer(sk_sp<SkRasterizer> rasterizer)
- Sets Rasterizer to rasterizer,
- decreasing Reference_Count of the previous Rasterizer.
- Pass nullptr to clear Rasterizer and leave Rasterizer effect on Mask_Alpha unaltered.
- Does not affect Mask_Filter.
- Does not alter rasterizer Reference_Count.
+Sets Rasterizer to rasterizer, decreasing Reference_Count of the previous
+Rasterizer. Pass nullptr to clear Rasterizer and leave Rasterizer effect on
+Mask_Alpha unaltered.
+
+Does not affect Mask_Filter.
+Increments rasterizer Reference_Count by one.
#Param rasterizer how geometry is converted to Mask_Alpha ##
@@ -3448,6 +3459,7 @@ Path, and Text.
Image_Filter operates on the pixel representation of the shape, as modified by Paint
with Blend_Mode set to SkBlendMode::kSrcOver. Image_Filter creates a new bitmap,
which is drawn to the device using the set Blend_Mode.
+
Image_Filter is higher level than Mask_Filter; for instance, an Image_Filter
can operate on all channels of Color, while Mask_Filter generates Alpha only.
Image_Filter operates independently of and can be used in combination with
@@ -3520,12 +3532,12 @@ Mask_Filter and Rasterizer.
#Method void setImageFilter(sk_sp<SkImageFilter> imageFilter)
- Sets Image_Filter to imageFilter,
- decreasing Reference_Count of the previous Image_Filter.
- Pass nullptr to clear Image_Filter, and remove Image_Filter effect
- on drawing.
- Does not affect Rasterizer or Mask_Filter.
- Does not alter imageFilter Reference_Count.
+Sets Image_Filter to imageFilter, decreasing Reference_Count of the previous
+Image_Filter. Pass nullptr to clear Image_Filter, and remove Image_Filter effect
+on drawing.
+
+Does not affect Rasterizer or Mask_Filter.
+Increments imageFilter Reference_Count by one.
#Param imageFilter how Image is sampled when transformed ##
@@ -3556,6 +3568,7 @@ Mask_Filter and Rasterizer.
Draw_Looper sets a modifier that communicates state from one Draw_Layer
to another to construct the draw.
+
Draw_Looper draws one or more times, modifying the canvas and paint each time.
Draw_Looper may be used to draw multiple colors or create a colored shadow.
Set Draw_Looper to nullptr to prevent Draw_Looper from modifying the draw.
@@ -3641,10 +3654,11 @@ Deprecated.
#Method void setDrawLooper(sk_sp<SkDrawLooper> drawLooper)
- Sets Draw_Looper to drawLooper,
- decreasing Reference_Count of the previous drawLooper.
- Pass nullptr to clear Draw_Looper and leave Draw_Looper effect on drawing unaltered.
- Does not alter drawLooper Reference_Count.
+Sets Draw_Looper to drawLooper, decreasing Reference_Count of the previous
+drawLooper. Pass nullptr to clear Draw_Looper and leave Draw_Looper effect on
+drawing unaltered.
+
+Increments drawLooper Reference_Count by one.
#Param drawLooper iterates through drawing one or more time, altering Paint ##
@@ -3992,19 +4006,23 @@ Text_Skew_X defaults to 0.
};
##
-TextEncoding determines whether text specifies character codes and their encoded size,
-or glyph indices. Character codes use the encoding specified by the
-#A Unicode standard # http://unicode.org/standard/standard.html ##.
+TextEncoding determines whether text specifies character codes and their encoded
+size, or glyph indices. Character codes use the encoding specified by the
+#A Unicode standard # http://unicode.org/standard/standard.html ##
+.
+
Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
-All character encoding are able to represent all of Unicode, differing only
+All character encodings are able to represent all of Unicode, differing only
in the total storage required.
-#A UTF-8 (RFC 3629) # https://tools.ietf.org/html/rfc3629 ## is made up of 8-bit bytes,
-and encodes ASCII in one byte, and all valid code points in Unicode in multiple
-bytes. #A UTF-16 (RFC 2781) # https://tools.ietf.org/html/rfc2781 ## uses one or two 16-bit words,
-and encodes Unicode ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF in one
-word. #A UTF-32 # http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf ## describes
-a 32-bit word, which encodes all code points in Unicode.
+#A UTF-8 (RFC 3629) # https://tools.ietf.org/html/rfc3629 ##
+ encodes each character as one or more 8-bit bytes.
+
+#A UTF-16 (RFC 2781) # https://tools.ietf.org/html/rfc2781 ##
+ encodes each character as one or two 16-bit words.
+
+#A UTF-32 # http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf ##
+ encodes each character as one 32-bit word.
Font_Manager uses font data to convert character code points into glyph indices.
A glyph index is a 16-bit word.
diff --git a/docs/SkPath_Reference.bmh b/docs/SkPath_Reference.bmh
index ca17a9cc8f..c34a21298b 100644
--- a/docs/SkPath_Reference.bmh
+++ b/docs/SkPath_Reference.bmh
@@ -2626,7 +2626,7 @@ A 90 degree circular arc has the weight
#Formula
1 / sqrt(2)
##
- .
+.
##
void draw(SkCanvas* canvas) {
const char* verbNames[] = { "move", "line", "quad", "conic", "cubic", "close", "done" };
@@ -3812,6 +3812,7 @@ next Quad. Maximum pts storage size is given by:
#Formula
(1 + 2 * (1 << pow2)) * sizeof(SkPoint)
##
+
ConvertConicToQuads returns Quad count used the approximation, which may be smaller
than the number requested.
@@ -4203,10 +4204,10 @@ four kConic_Verb, and kClose_Verb. Circle begins at
#Formula
(x + radius, y)
##
-and continues clockwise if dir is kCW_Direction, counterclockwise if dir is
+, continuing clockwise if dir is kCW_Direction, and counterclockwise if dir is
kCCW_Direction.
-addCircle has no effect if radius is zero or negative.
+Has no effect if radius is zero or negative.
#Param x center of Circle ##
#Param y center of Circle ##
@@ -4469,13 +4470,10 @@ void draw(SkCanvas* canvas) {
#Method void addPoly(const SkPoint pts[], int count, bool close)
-Add Contour created from Line array, adding
-#Formula
-count - 1
-##
-Line segments. Contour added starts at pts[0], then adds a line
-for every additional Point in pts array. If close is true,
-appends kClose_Verb to Path, connecting pts[count - 1] and pts[0].
+Add Contour created from Line array, adding (count - 1) Line segments.
+Contour added starts at pts[0], then adds a line for every additional Point
+in pts array. If close is true,appends kClose_Verb to Path, connecting
+pts[count - 1] and pts[0].
If count is zero, append kMove_Verb to path.
Has no effect if count is less than one.
@@ -5125,7 +5123,9 @@ directly compiled as C++ code. Floating point values are written
in hexadecimal to preserve their exact bit pattern. The output reconstructs the
original Path.
-Use instead of dump() when submitting #A bug reports against Skia # http://bug.skia.org ##.
+Use instead of dump() when submitting
+#A bug reports against Skia # http://bug.skia.org ##
+.
Slight value changes in Point_Array may cause the bug to disappear.
#Example
diff --git a/docs/SkPixmap_Reference.bmh b/docs/SkPixmap_Reference.bmh
index 409090b2bd..521d6dea15 100644
--- a/docs/SkPixmap_Reference.bmh
+++ b/docs/SkPixmap_Reference.bmh
@@ -98,21 +98,21 @@ after Pixmap has been created.
#Return empty Pixmap ##
#Example
-void draw(SkCanvas* canvas) {
- const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
- const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444", "RGBA_8888", "BGRA_8888",
- "Gray_8", "RGBA_F16"};
- SkPixmap pixmap;
- for (int i = 0; i < 2; ++i) {
- SkDebugf("width: %2d height: %2d", pixmap.width(), pixmap.height());
- SkDebugf(" color: k%s_SkColorType", colors[pixmap.colorType()]);
- SkDebugf(" alpha: k%s_SkAlphaType\n", alphas[pixmap.alphaType()]);
- pixmap.reset(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType),
- nullptr, 0);
- }
+void draw(SkCanvas* canvas) {
+ const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
+ const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444", "RGBA_8888", "BGRA_8888",
+ "Gray_8", "RGBA_F16"};
+ SkPixmap pixmap;
+ for (int i = 0; i < 2; ++i) {
+ SkDebugf("width: %2d height: %2d", pixmap.width(), pixmap.height());
+ SkDebugf(" color: k%s_SkColorType", colors[pixmap.colorType()]);
+ SkDebugf(" alpha: k%s_SkAlphaType\n", alphas[pixmap.alphaType()]);
+ pixmap.reset(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType),
+ nullptr, 0);
+ }
}
#StdOut
-width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
+width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
width: 25 height: 35 color: kRGBA_8888_SkColorType alpha: kOpaque_SkAlphaType
##
##
@@ -126,16 +126,13 @@ width: 25 height: 35 color: kRGBA_8888_SkColorType alpha: kOpaque_SkAlphaType
#Method SkPixmap(const SkImageInfo& info, const void* addr, size_t rowBytes)
Creates Pixmap from info width, height, SkAlphaType, and SkColorType.
-addr points to pixels, or nullptr. rowBytes should be
-#Formula
-info.width() * info.bytesPerPixel()
-##
-or larger.
+addr points to pixels, or nullptr. rowBytes should be info.width() times
+info.bytesPerPixel(), or larger.
No parameter checking is performed; it is up to the caller to ensure that
addr and rowBytes agree with info.
-The memory lifetime pixels are managed by the caller. When Pixmap goes
+The memory lifetime of pixels is managed by the caller. When Pixmap goes
out of scope, addr is unaffected.
Pixmap may be later modified by reset() to change its size, pixel type, or
@@ -153,14 +150,14 @@ storage.
SkImage::MakeRasterCopy takes const SkPixmap& as an argument. The example
constructs a SkPixmap from the brace-delimited parameters.
##
- SkDebugf("image alpha only = %s\n", image->isAlphaOnly() ? "true" : "false");
- SkPMColor pmColors = 0;
- sk_sp<SkImage> copy = SkImage::MakeRasterCopy({SkImageInfo::MakeA8(1, 1),
- (uint8_t*)&pmColors,
- 1});
+ SkDebugf("image alpha only = %s\n", image->isAlphaOnly() ? "true" : "false");
+ SkPMColor pmColors = 0;
+ sk_sp<SkImage> copy = SkImage::MakeRasterCopy({SkImageInfo::MakeA8(1, 1),
+ (uint8_t*)&pmColors,
+ 1});
SkDebugf("copy alpha only = %s\n", copy->isAlphaOnly() ? "true" : "false");
#StdOut
-image alpha only = false
+image alpha only = false
copy alpha only = true
##
##
@@ -180,22 +177,22 @@ The prior pixels are unaffected; it is up to the caller to release pixels
memory if desired.
#Example
-void draw(SkCanvas* canvas) {
- const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
- const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444", "RGBA_8888", "BGRA_8888",
- "Gray_8", "RGBA_F16"};
- SkPixmap pixmap(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType),
- nullptr, 0);
- for (int i = 0; i < 2; ++i) {
- SkDebugf("width: %2d height: %2d", pixmap.width(), pixmap.height());
- SkDebugf(" color: k%s_SkColorType", colors[pixmap.colorType()]);
- SkDebugf(" alpha: k%s_SkAlphaType\n", alphas[pixmap.alphaType()]);
- pixmap.reset();
- }
-}
+void draw(SkCanvas* canvas) {
+ const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
+ const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444", "RGBA_8888", "BGRA_8888",
+ "Gray_8", "RGBA_F16"};
+ SkPixmap pixmap(SkImageInfo::Make(25, 35, kRGBA_8888_SkColorType, kOpaque_SkAlphaType),
+ nullptr, 0);
+ for (int i = 0; i < 2; ++i) {
+ SkDebugf("width: %2d height: %2d", pixmap.width(), pixmap.height());
+ SkDebugf(" color: k%s_SkColorType", colors[pixmap.colorType()]);
+ SkDebugf(" alpha: k%s_SkAlphaType\n", alphas[pixmap.alphaType()]);
+ pixmap.reset();
+ }
+}
#StdOut
width: 25 height: 35 color: kRGBA_8888_SkColorType alpha: kOpaque_SkAlphaType
-width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
+width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
##
##
@@ -209,11 +206,8 @@ width: 0 height: 0 color: kUnknown_SkColorType alpha: kUnknown_SkAlphaType
Sets width, height, SkAlphaType, and SkColorType from info.
Sets pixel address from addr, which may be nullptr.
-Sets row bytes from rowBytes, which should be
-#Formula
-info.width() * info.bytesPerPixel()
-##
-or larger.
+Sets row bytes from rowBytes, which should be info.width() times
+info.bytesPerPixel(), or larger.
Does not check addr. Asserts if built with SK_DEBUG defined and if rowBytes is
too small to hold one row of pixels.
@@ -228,21 +222,21 @@ out of scope, addr is unaffected.
#Example
#Image 4
#Height 128
-void draw(SkCanvas* canvas) {
- std::vector<int32_t> pixels;
- pixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
- int x = 0;
- for (auto colorType : { kRGBA_8888_SkColorType, kBGRA_8888_SkColorType } ) {
- pixmap.reset(SkImageInfo::Make(image->width(), image->height(), colorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- SkBitmap bitmap;
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, x, 0);
- x += 128;
- }
+void draw(SkCanvas* canvas) {
+ std::vector<int32_t> pixels;
+ pixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
+ int x = 0;
+ for (auto colorType : { kRGBA_8888_SkColorType, kBGRA_8888_SkColorType } ) {
+ pixmap.reset(SkImageInfo::Make(image->width(), image->height(), colorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ SkBitmap bitmap;
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, x, 0);
+ x += 128;
+ }
}
##
@@ -257,18 +251,18 @@ void draw(SkCanvas* canvas) {
Changes Color_Space in Image_Info; preserves width, height, SkAlphaType, and
SkColorType in Image, and leaves pixel address and row bytes unchanged.
-colorSpace reference count is incremented.
+Color_Space reference count is incremented.
#Param colorSpace Color_Space moved to Image_Info ##
#Example
-void draw(SkCanvas* canvas) {
- SkPixmap pixmap;
- sk_sp<SkColorSpace> colorSpace1 = SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma,
- SkColorSpace::kRec2020_Gamut);
- SkDebugf("is %sunique\n", colorSpace1->unique() ? "" : "not ");
- pixmap.setColorSpace(colorSpace1);
- SkDebugf("is %sunique\n", colorSpace1->unique() ? "" : "not ");
+void draw(SkCanvas* canvas) {
+ SkPixmap pixmap;
+ sk_sp<SkColorSpace> colorSpace1 = SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma,
+ SkColorSpace::kRec2020_Gamut);
+ SkDebugf("is %sunique\n", colorSpace1->unique() ? "" : "not ");
+ pixmap.setColorSpace(colorSpace1);
+ SkDebugf("is %sunique\n", colorSpace1->unique() ? "" : "not ");
}
#StdOut
is unique
@@ -296,26 +290,26 @@ Failing to read the return value generates a compile time warning.
#Return true if set to Mask properties ##
#Example
- const int width = 2;
- const int height = 2;
- uint8_t bytes[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
- SkMask mask;
- mask.fFormat = SkMask::kA8_Format;
- mask.fBounds = {0, 0, width, height};
- mask.fImage = bytes;
- mask.fRowBytes = (width + 7) >> 3;
- SkPixmap pixmap;
- bool success = pixmap.reset(mask);
- SkDebugf("success: %s width: %d height: %d\n", success ? "true " : "false",
- pixmap.width(), pixmap.height());
- mask.fFormat = SkMask::kBW_Format;
- success = pixmap.reset(mask);
- SkDebugf("success: %s width: %d height: %d\n", success ? "true " : "false",
- pixmap.width(), pixmap.height());
-#StdOut
-success: true width: 2 height: 2
-success: false width: 0 height: 0
-##
+ const int width = 2;
+ const int height = 2;
+ uint8_t bytes[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
+ SkMask mask;
+ mask.fFormat = SkMask::kA8_Format;
+ mask.fBounds = {0, 0, width, height};
+ mask.fImage = bytes;
+ mask.fRowBytes = (width + 7) >> 3;
+ SkPixmap pixmap;
+ bool success = pixmap.reset(mask);
+ SkDebugf("success: %s width: %d height: %d\n", success ? "true " : "false",
+ pixmap.width(), pixmap.height());
+ mask.fFormat = SkMask::kBW_Format;
+ success = pixmap.reset(mask);
+ SkDebugf("success: %s width: %d height: %d\n", success ? "true " : "false",
+ pixmap.width(), pixmap.height());
+#StdOut
+success: true width: 2 height: 2
+success: false width: 0 height: 0
+##
##
#SeeAlso Mask reset()
@@ -340,18 +334,18 @@ Failing to read the return value generates a compile time warning.
#Example
#Image 3
#Height 128
-void draw(SkCanvas* canvas) {
- std::vector<int32_t> pixels;
- pixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
- SkPixmap inset;
- if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
- SkBitmap bitmap;
- bitmap.installPixels(inset);
- canvas->drawBitmap(bitmap, 0, 0);
- }
+void draw(SkCanvas* canvas) {
+ std::vector<int32_t> pixels;
+ pixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
+ SkPixmap inset;
+ if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
+ SkBitmap bitmap;
+ bitmap.installPixels(inset);
+ canvas->drawBitmap(bitmap, 0, 0);
+ }
}
##
@@ -367,29 +361,29 @@ void draw(SkCanvas* canvas) {
#Method const SkImageInfo& info() const
-Returns width, height, SkAlphaType, and SkColorType.
+Returns width, height, Alpha_Type, Color_Type, and Color_Space.
#Return reference to ImageInfo ##
#Example
#Image 3
- std::vector<int32_t> pixels;
- pixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
- SkPixmap inset;
- if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
- const SkImageInfo& info = inset.info();
- const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
- const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
- "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
- SkDebugf("width: %d height: %d color: %s alpha: %s\n", info.width(), info.height(),
- colors[info.colorType()], alphas[info.alphaType()]);
- }
-#StdOut
-width: 384 height: 384 color: BGRA_8888 alpha: Opaque
-##
+ std::vector<int32_t> pixels;
+ pixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
+ SkPixmap inset;
+ if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
+ const SkImageInfo& info = inset.info();
+ const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
+ const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
+ "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
+ SkDebugf("width: %d height: %d color: %s alpha: %s\n", info.width(), info.height(),
+ colors[info.colorType()], alphas[info.alphaType()]);
+ }
+#StdOut
+width: 384 height: 384 color: BGRA_8888 alpha: Opaque
+##
##
#SeeAlso Image_Info
@@ -419,7 +413,7 @@ for (auto& pixmap : { badPixmap, okPixmap } ) {
pixmap.info().minRowBytes());
}
#StdOut
-rowBytes: 2 minRowBytes: 4
+rowBytes: 2 minRowBytes: 4
rowBytes: 8 minRowBytes: 4
##
##
@@ -432,7 +426,7 @@ rowBytes: 8 minRowBytes: 4
#Method const void* addr() const
-Returns pixel address, the base corresponding the pixel origin.
+Returns pixel address, the base address corresponding to the pixel origin.
It is up to the Pixmap creator to ensure that pixel address is a useful value.
@@ -440,21 +434,21 @@ It is up to the Pixmap creator to ensure that pixel address is a useful value.
#Example
#Image 3
- std::vector<int32_t> pixels;
- pixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
- SkDebugf("pixels address: 0x%llx\n", pixmap.addr());
- SkPixmap inset;
- if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
- SkDebugf("inset address: 0x%llx\n", inset.addr());
- }
-#StdOut
-#Volatile
-pixels address: 0x7f2a440bb010
-inset address: 0x7f2a440fb210
-##
+ std::vector<int32_t> pixels;
+ pixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
+ SkDebugf("pixels address: 0x%llx\n", pixmap.addr());
+ SkPixmap inset;
+ if (pixmap.extractSubset(&inset, {128, 128, 512, 512})) {
+ SkDebugf("inset address: 0x%llx\n", inset.addr());
+ }
+#StdOut
+#Volatile
+pixels address: 0x7f2a440bb010
+inset address: 0x7f2a440fb210
+##
##
#SeeAlso addr(int x, int y) addr8 addr16 addr32 addr64 info() rowBytes()
@@ -475,11 +469,11 @@ rowBytes() / info.bytesPerPixel()
#Example
SkImageInfo info = SkImageInfo::MakeA8(16, 32);
- SkPixmap pixmap(info, nullptr, 64);
- SkDebugf("pixmap width: %d info width: %d\n", pixmap.width(), info.width());
-#StdOut
-pixmap width: 16 info width: 16
-##
+ SkPixmap pixmap(info, nullptr, 64);
+ SkDebugf("pixmap width: %d info width: %d\n", pixmap.width(), info.width());
+#StdOut
+pixmap width: 16 info width: 16
+##
##
#SeeAlso height()
@@ -496,11 +490,11 @@ Returns pixel row count.
#Example
SkImageInfo info = SkImageInfo::MakeA8(16, 32);
- SkPixmap pixmap(info, nullptr, 64);
- SkDebugf("pixmap height: %d info height: %d\n", pixmap.height(), info.height());
-#StdOut
-pixmap height: 32 info height: 32
-##
+ SkPixmap pixmap(info, nullptr, 64);
+ SkDebugf("pixmap height: %d info height: %d\n", pixmap.height(), info.height());
+#StdOut
+pixmap height: 32 info height: 32
+##
##
#SeeAlso width()
@@ -518,13 +512,13 @@ kBGRA_8888_SkColorType, kGray_8_SkColorType, kRGBA_F16_SkColorType.
#Return Color_Type in Image_Info ##
#Example
- const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
- "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
- SkPixmap pixmap(SkImageInfo::MakeA8(16, 32), nullptr, 64);
- SkDebugf("color type: k" "%s" "_SkColorType\n", colors[pixmap.colorType()]);
-#StdOut
+ const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
+ "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
+ SkPixmap pixmap(SkImageInfo::MakeA8(16, 32), nullptr, 64);
+ SkDebugf("color type: k" "%s" "_SkColorType\n", colors[pixmap.colorType()]);
+#StdOut
color type: kAlpha_SkColorType
-##
+##
##
#SeeAlso alphaType()
@@ -541,9 +535,9 @@ kPremul_SkAlphaType, kUnpremul_SkAlphaType.
#Return Alpha_Type in Image_Info ##
#Example
- const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
- SkPixmap pixmap(SkImageInfo::MakeA8(16, 32), nullptr, 64);
- SkDebugf("alpha type: k" "%s" "_SkAlphaType\n", alphas[pixmap.alphaType()]);
+ const char* alphas[] = {"Unknown", "Opaque", "Premul", "Unpremul"};
+ SkPixmap pixmap(SkImageInfo::MakeA8(16, 32), nullptr, 64);
+ SkDebugf("alpha type: k" "%s" "_SkAlphaType\n", alphas[pixmap.alphaType()]);
#StdOut
alpha type: kPremul_SkAlphaType
##
@@ -566,16 +560,16 @@ Returns Color_Space associated with Image_Info.
SkColorSpace::MakeSRGBLinear creates Color_Space with linear gamma
and an sRGB gamut. This Color_Space gamma is not close to sRGB gamma.
##
- SkPixmap pixmap(SkImageInfo::MakeN32(16, 32, kPremul_SkAlphaType,
- SkColorSpace::MakeSRGBLinear()), nullptr, 64);
- SkColorSpace* colorSpace = pixmap.colorSpace();
- SkDebugf("gammaCloseToSRGB: %s gammaIsLinear: %s isSRGB: %s\n",
- colorSpace->gammaCloseToSRGB() ? "true" : "false",
- colorSpace->gammaIsLinear() ? "true" : "false",
- colorSpace->isSRGB() ? "true" : "false");
-#StdOut
-gammaCloseToSRGB: false gammaIsLinear: true isSRGB: false
-##
+ SkPixmap pixmap(SkImageInfo::MakeN32(16, 32, kPremul_SkAlphaType,
+ SkColorSpace::MakeSRGBLinear()), nullptr, 64);
+ SkColorSpace* colorSpace = pixmap.colorSpace();
+ SkDebugf("gammaCloseToSRGB: %s gammaIsLinear: %s isSRGB: %s\n",
+ colorSpace->gammaCloseToSRGB() ? "true" : "false",
+ colorSpace->gammaIsLinear() ? "true" : "false",
+ colorSpace->isSRGB() ? "true" : "false");
+#StdOut
+gammaCloseToSRGB: false gammaIsLinear: true isSRGB: false
+##
##
#SeeAlso Color_Space
@@ -595,24 +589,24 @@ Does not check if Color_Type allows Alpha, or Alpha in pixel values.
#Description
isOpaque ignores whether all pixels are opaque or not.
##
- std::vector<uint32_t> pixels;
- const int height = 2;
- const int width = 2;
- pixels.resize(height * width * 4);
- SkPixmap pixmap(SkImageInfo::Make(width, height, kN32_SkColorType,
- kPremul_SkAlphaType), (const void*) &pixels.front(), width * 4);
- for (int index = 0; index < 2; ++index) {
- pixmap.erase(0x00000000);
- SkDebugf("isOpaque: %s\n", pixmap.isOpaque() ? "true" : "false");
- pixmap.erase(0xFFFFFFFF);
- SkDebugf("isOpaque: %s\n", pixmap.isOpaque() ? "true" : "false");
- pixmap.reset(pixmap.info().makeAlphaType(kOpaque_SkAlphaType),
- (const void*) &pixels.front(), width * 4);
- }
+ std::vector<uint32_t> pixels;
+ const int height = 2;
+ const int width = 2;
+ pixels.resize(height * width * 4);
+ SkPixmap pixmap(SkImageInfo::Make(width, height, kN32_SkColorType,
+ kPremul_SkAlphaType), (const void*) &pixels.front(), width * 4);
+ for (int index = 0; index < 2; ++index) {
+ pixmap.erase(0x00000000);
+ SkDebugf("isOpaque: %s\n", pixmap.isOpaque() ? "true" : "false");
+ pixmap.erase(0xFFFFFFFF);
+ SkDebugf("isOpaque: %s\n", pixmap.isOpaque() ? "true" : "false");
+ pixmap.reset(pixmap.info().makeAlphaType(kOpaque_SkAlphaType),
+ (const void*) &pixels.front(), width * 4);
+ }
#StdOut
-isOpaque: false
-isOpaque: false
-isOpaque: true
+isOpaque: false
+isOpaque: false
+isOpaque: true
isOpaque: true
##
##
@@ -636,15 +630,15 @@ Returns IRect
#Example
for (int width : { 0, 2 } ) {
for (int height : { 0, 2 } ) {
- SkPixmap pixmap(SkImageInfo::MakeA8(width, height), nullptr, width);
+ SkPixmap pixmap(SkImageInfo::MakeA8(width, height), nullptr, width);
SkDebugf("width: %d height: %d empty: %s\n", width, height,
pixmap.bounds().isEmpty() ? "true" : "false");
}
}
#StdOut
-width: 0 height: 0 empty: true
-width: 0 height: 2 empty: true
-width: 2 height: 0 empty: true
+width: 0 height: 0 empty: true
+width: 0 height: 2 empty: true
+width: 2 height: 0 empty: true
width: 2 height: 2 empty: false
##
##
@@ -664,15 +658,15 @@ width().
#Return maximum pixels per row ##
#Example
- for (int rowBytes : { 4, 5, 6, 7, 8} ) {
- SkPixmap pixmap(SkImageInfo::MakeN32(1, 1, kPremul_SkAlphaType), nullptr, rowBytes);
- SkDebugf("rowBytes: %d rowBytesAsPixels: %d\n", rowBytes, pixmap.rowBytesAsPixels());
- }
+ for (int rowBytes : { 4, 5, 6, 7, 8} ) {
+ SkPixmap pixmap(SkImageInfo::MakeN32(1, 1, kPremul_SkAlphaType), nullptr, rowBytes);
+ SkDebugf("rowBytes: %d rowBytesAsPixels: %d\n", rowBytes, pixmap.rowBytesAsPixels());
+ }
#StdOut
-rowBytes: 4 rowBytesAsPixels: 1
-rowBytes: 5 rowBytesAsPixels: 1
-rowBytes: 6 rowBytesAsPixels: 1
-rowBytes: 7 rowBytesAsPixels: 1
+rowBytes: 4 rowBytesAsPixels: 1
+rowBytes: 5 rowBytesAsPixels: 1
+rowBytes: 6 rowBytesAsPixels: 1
+rowBytes: 7 rowBytesAsPixels: 1
rowBytes: 8 rowBytesAsPixels: 2
##
##
@@ -691,26 +685,26 @@ Returns zero for kUnknown_SkColorType.
#Return one of: 0, 1, 2, 3; left shift to convert pixels to bytes ##
#Example
- const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
- "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
- SkImageInfo info = SkImageInfo::MakeA8(1, 1);
- for (SkColorType colorType : { kUnknown_SkColorType, kAlpha_8_SkColorType,
- kRGB_565_SkColorType, kARGB_4444_SkColorType,
- kRGBA_8888_SkColorType, kBGRA_8888_SkColorType,
- kGray_8_SkColorType, kRGBA_F16_SkColorType } ) {
- SkPixmap pixmap(info.makeColorType(colorType), nullptr, 4);
- SkDebugf("color: k" "%s" "_SkColorType" "%*s" "bytesPerPixel: %d shiftPerPixel: %d\n",
- colors[colorType], 10 - strlen(colors[colorType]), " ",
- pixmap.info().bytesPerPixel(), pixmap.shiftPerPixel());
- }
+ const char* colors[] = {"Unknown", "Alpha", "RGB_565", "ARGB_4444",
+ "RGBA_8888", "BGRA_8888", "Gray_8", "RGBA_F16"};
+ SkImageInfo info = SkImageInfo::MakeA8(1, 1);
+ for (SkColorType colorType : { kUnknown_SkColorType, kAlpha_8_SkColorType,
+ kRGB_565_SkColorType, kARGB_4444_SkColorType,
+ kRGBA_8888_SkColorType, kBGRA_8888_SkColorType,
+ kGray_8_SkColorType, kRGBA_F16_SkColorType } ) {
+ SkPixmap pixmap(info.makeColorType(colorType), nullptr, 4);
+ SkDebugf("color: k" "%s" "_SkColorType" "%*s" "bytesPerPixel: %d shiftPerPixel: %d\n",
+ colors[colorType], 10 - strlen(colors[colorType]), " ",
+ pixmap.info().bytesPerPixel(), pixmap.shiftPerPixel());
+ }
#StdOut
-color: kUnknown_SkColorType bytesPerPixel: 0 shiftPerPixel: 0
-color: kAlpha_SkColorType bytesPerPixel: 1 shiftPerPixel: 0
-color: kRGB_565_SkColorType bytesPerPixel: 2 shiftPerPixel: 1
-color: kARGB_4444_SkColorType bytesPerPixel: 2 shiftPerPixel: 1
-color: kRGBA_8888_SkColorType bytesPerPixel: 4 shiftPerPixel: 2
-color: kBGRA_8888_SkColorType bytesPerPixel: 4 shiftPerPixel: 2
-color: kGray_8_SkColorType bytesPerPixel: 1 shiftPerPixel: 0
+color: kUnknown_SkColorType bytesPerPixel: 0 shiftPerPixel: 0
+color: kAlpha_SkColorType bytesPerPixel: 1 shiftPerPixel: 0
+color: kRGB_565_SkColorType bytesPerPixel: 2 shiftPerPixel: 1
+color: kARGB_4444_SkColorType bytesPerPixel: 2 shiftPerPixel: 1
+color: kRGBA_8888_SkColorType bytesPerPixel: 4 shiftPerPixel: 2
+color: kBGRA_8888_SkColorType bytesPerPixel: 4 shiftPerPixel: 2
+color: kGray_8_SkColorType bytesPerPixel: 1 shiftPerPixel: 0
color: kRGBA_F16_SkColorType bytesPerPixel: 8 shiftPerPixel: 3
##
##
@@ -729,25 +723,25 @@ Includes unused memory on last row when rowBytesAsPixels exceeds width().
#Return conservative pixel storage size ##
#Example
- SkPixmap pixmap;
- for (int width : { 1, 1000, 1000000 } ) {
- for (int height: { 1, 1000, 1000000 } ) {
- SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
- pixmap.reset(imageInfo , nullptr, width * 5);
- SkDebugf("width: %7d height: %7d getSize64: %13lld\n", width, height, pixmap.getSize64());
- }
- }
-#StdOut
-width: 1 height: 1 getSize64: 5
-width: 1 height: 1000 getSize64: 5000
-width: 1 height: 1000000 getSize64: 5000000
-width: 1000 height: 1 getSize64: 5000
-width: 1000 height: 1000 getSize64: 5000000
-width: 1000 height: 1000000 getSize64: 5000000000
-width: 1000000 height: 1 getSize64: 5000000
-width: 1000000 height: 1000 getSize64: 5000000000
-width: 1000000 height: 1000000 getSize64: 5000000000000
-##
+ SkPixmap pixmap;
+ for (int width : { 1, 1000, 1000000 } ) {
+ for (int height: { 1, 1000, 1000000 } ) {
+ SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
+ pixmap.reset(imageInfo , nullptr, width * 5);
+ SkDebugf("width: %7d height: %7d getSize64: %13lld\n", width, height, pixmap.getSize64());
+ }
+ }
+#StdOut
+width: 1 height: 1 getSize64: 5
+width: 1 height: 1000 getSize64: 5000
+width: 1 height: 1000000 getSize64: 5000000
+width: 1000 height: 1 getSize64: 5000
+width: 1000 height: 1000 getSize64: 5000000
+width: 1000 height: 1000000 getSize64: 5000000000
+width: 1000000 height: 1 getSize64: 5000000
+width: 1000000 height: 1000 getSize64: 5000000000
+width: 1000000 height: 1000000 getSize64: 5000000000000
+##
##
#SeeAlso getSafeSize64 getSafeSize height() rowBytes width() SkImageInfo::bytesPerPixel
@@ -764,24 +758,24 @@ Does not include unused memory on last row when rowBytesAsPixels exceeds width()
#Return exact pixel storage size ##
#Example
- SkPixmap pixmap;
- for (int width : { 1, 1000, 1000000 } ) {
- for (int height: { 1, 1000, 1000000 } ) {
- SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
- pixmap.reset(imageInfo , nullptr, width * 5);
- SkDebugf("width: %7d height: %7d getSafeSize64: %13lld\n", width, height,
- pixmap.getSafeSize64());
- }
- }
-#StdOut
-width: 1 height: 1 getSafeSize64: 4
-width: 1 height: 1000 getSafeSize64: 4999
-width: 1 height: 1000000 getSafeSize64: 4999999
-width: 1000 height: 1 getSafeSize64: 4000
-width: 1000 height: 1000 getSafeSize64: 4999000
-width: 1000 height: 1000000 getSafeSize64: 4999999000
-width: 1000000 height: 1 getSafeSize64: 4000000
-width: 1000000 height: 1000 getSafeSize64: 4999000000
+ SkPixmap pixmap;
+ for (int width : { 1, 1000, 1000000 } ) {
+ for (int height: { 1, 1000, 1000000 } ) {
+ SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
+ pixmap.reset(imageInfo , nullptr, width * 5);
+ SkDebugf("width: %7d height: %7d getSafeSize64: %13lld\n", width, height,
+ pixmap.getSafeSize64());
+ }
+ }
+#StdOut
+width: 1 height: 1 getSafeSize64: 4
+width: 1 height: 1000 getSafeSize64: 4999
+width: 1 height: 1000000 getSafeSize64: 4999999
+width: 1000 height: 1 getSafeSize64: 4000
+width: 1000 height: 1000 getSafeSize64: 4999000
+width: 1000 height: 1000000 getSafeSize64: 4999999000
+width: 1000000 height: 1 getSafeSize64: 4000000
+width: 1000000 height: 1000 getSafeSize64: 4999000000
width: 1000000 height: 1000000 getSafeSize64: 4999999000000
##
##
@@ -802,26 +796,26 @@ The largest value than can be returned is 2,147,483,647.
#Return exact pixel storage size if size fits in signed 32 bits ##
#Example
-void draw(SkCanvas* canvas) {
- SkPixmap pixmap;
- for (int width : { 1, 1000, 1000000 } ) {
- for (int height: { 1, 1000, 1000000 } ) {
- SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
- pixmap.reset(imageInfo , nullptr, width * 5);
- SkDebugf("width: %7d height: %7d getSafeSize: %7d\n", width, height, pixmap.getSafeSize());
- }
- }
+void draw(SkCanvas* canvas) {
+ SkPixmap pixmap;
+ for (int width : { 1, 1000, 1000000 } ) {
+ for (int height: { 1, 1000, 1000000 } ) {
+ SkImageInfo imageInfo = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
+ pixmap.reset(imageInfo , nullptr, width * 5);
+ SkDebugf("width: %7d height: %7d getSafeSize: %7d\n", width, height, pixmap.getSafeSize());
+ }
+ }
}
-#StdOut
-width: 1 height: 1 getSafeSize: 4
-width: 1 height: 1000 getSafeSize: 4999
-width: 1 height: 1000000 getSafeSize: 4999999
-width: 1000 height: 1 getSafeSize: 4000
-width: 1000 height: 1000 getSafeSize: 4999000
-width: 1000 height: 1000000 getSafeSize: 0
-width: 1000000 height: 1 getSafeSize: 4000000
-width: 1000000 height: 1000 getSafeSize: 0
-width: 1000000 height: 1000000 getSafeSize: 0
+#StdOut
+width: 1 height: 1 getSafeSize: 4
+width: 1 height: 1000 getSafeSize: 4999
+width: 1 height: 1000000 getSafeSize: 4999999
+width: 1000 height: 1 getSafeSize: 4000
+width: 1000 height: 1000 getSafeSize: 4999000
+width: 1000 height: 1000000 getSafeSize: 0
+width: 1000000 height: 1 getSafeSize: 4000000
+width: 1000000 height: 1000 getSafeSize: 0
+width: 1000000 height: 1000000 getSafeSize: 0
##
##
@@ -839,7 +833,7 @@ width: 1000000 height: 1000000 getSafeSize: 0
Returns true if all pixels are opaque. Color_Type determines how pixels
are encoded, and whether pixel describes Alpha. Returns true for Color_Types
-without alpha for each pixel; for other Color_Types, returns true if all
+without alpha in each pixel; for other Color_Types, returns true if all
pixels have alpha values equivalent to 1.0 or greater.
For Color_Types kRGB_565_SkColorType or kGray_8_SkColorType: always
@@ -849,29 +843,29 @@ For Color_Type kARGB_4444_SkColorType: returns true if all pixel Alpha values ar
For kRGBA_F16_SkColorType: returns true if all pixel Alpha values are 1.0 or
greater.
-Returns false for any other Color_Type.
+Returns false for kUnknown_SkColorType.
#Return true all pixels have opaque values or Color_Type is opaque ##
#Example
- std::vector<uint32_t> pixels;
- const int height = 2;
- const int width = 2;
- pixels.resize(height * width * 4);
- SkPixmap pixmap(SkImageInfo::Make(width, height, kN32_SkColorType,
- kPremul_SkAlphaType), (const void*) &pixels.front(), width * 4);
- for (int index = 0; index < 2; ++index) {
- pixmap.erase(0x00000000);
- SkDebugf("computeIsOpaque: %s\n", pixmap.computeIsOpaque() ? "true" : "false");
- pixmap.erase(0xFFFFFFFF);
- SkDebugf("computeIsOpaque: %s\n", pixmap.computeIsOpaque() ? "true" : "false");
- pixmap.reset(pixmap.info().makeAlphaType(kOpaque_SkAlphaType),
- (const void*) &pixels.front(), width * 4);
+ std::vector<uint32_t> pixels;
+ const int height = 2;
+ const int width = 2;
+ pixels.resize(height * width * 4);
+ SkPixmap pixmap(SkImageInfo::Make(width, height, kN32_SkColorType,
+ kPremul_SkAlphaType), (const void*) &pixels.front(), width * 4);
+ for (int index = 0; index < 2; ++index) {
+ pixmap.erase(0x00000000);
+ SkDebugf("computeIsOpaque: %s\n", pixmap.computeIsOpaque() ? "true" : "false");
+ pixmap.erase(0xFFFFFFFF);
+ SkDebugf("computeIsOpaque: %s\n", pixmap.computeIsOpaque() ? "true" : "false");
+ pixmap.reset(pixmap.info().makeAlphaType(kOpaque_SkAlphaType),
+ (const void*) &pixels.front(), width * 4);
}
#StdOut
-computeIsOpaque: false
-computeIsOpaque: true
-computeIsOpaque: false
+computeIsOpaque: false
+computeIsOpaque: true
+computeIsOpaque: false
computeIsOpaque: true
##
##
@@ -896,43 +890,43 @@ Color_Space in Image_Info is ignored. Some Color precision may be lost in the
conversion to Unpremultiplied Color; original pixel data may have additional
precision.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return pixel converted to Unpremultiplied Color ##
#Example
- const int w = 4;
- const int h = 4;
- std::vector<SkPMColor> storage;
- storage.resize(w * h);
- SkDebugf("Premultiplied:\n");
- for (int y = 0; y < h; ++y) {
- SkDebugf("(0, %d) ", y);
- for (int x = 0; x < w; ++x) {
- int a = 0xFF * (x + y) / (w - 1 + h - 1);
- storage[x + y * w] = SkPackARGB32(a, a * x / (w - 1), a * y / (h - 1), a);
- SkDebugf("0x%08x%c", storage[x + y * w], x == w - 1 ? '\n' : ' ');
- }
- }
- SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), &storage.front(), w * 4);
- SkDebugf("Unpremultiplied:\n");
- for (int y = 0; y < h; ++y) {
- SkDebugf("(0, %d) ", y);
- for (int x = 0; x < w; ++x) {
- SkDebugf("0x%08x%c", pixmap.getColor(x, y), x == w - 1 ? '\n' : ' ');
- }
- }
+ const int w = 4;
+ const int h = 4;
+ std::vector<SkPMColor> storage;
+ storage.resize(w * h);
+ SkDebugf("Premultiplied:\n");
+ for (int y = 0; y < h; ++y) {
+ SkDebugf("(0, %d) ", y);
+ for (int x = 0; x < w; ++x) {
+ int a = 0xFF * (x + y) / (w - 1 + h - 1);
+ storage[x + y * w] = SkPackARGB32(a, a * x / (w - 1), a * y / (h - 1), a);
+ SkDebugf("0x%08x%c", storage[x + y * w], x == w - 1 ? '\n' : ' ');
+ }
+ }
+ SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), &storage.front(), w * 4);
+ SkDebugf("Unpremultiplied:\n");
+ for (int y = 0; y < h; ++y) {
+ SkDebugf("(0, %d) ", y);
+ for (int x = 0; x < w; ++x) {
+ SkDebugf("0x%08x%c", pixmap.getColor(x, y), x == w - 1 ? '\n' : ' ');
+ }
+ }
#StdOut
-Premultiplied:
-(0, 0) 0x00000000 0x2a0e002a 0x55380055 0x7f7f007f
-(0, 1) 0x2a000e2a 0x551c1c55 0x7f542a7f 0xaaaa38aa
-(0, 2) 0x55003855 0x7f2a547f 0xaa7171aa 0xd4d48dd4
-(0, 3) 0x7f007f7f 0xaa38aaaa 0xd48dd4d4 0xffffffff
-Unpremultiplied:
-(0, 0) 0x00000000 0x2a5500ff 0x55a800ff 0x7fff00ff
-(0, 1) 0x2a0055ff 0x555454ff 0x7fa954ff 0xaaff54ff
-(0, 2) 0x5500a8ff 0x7f54a9ff 0xaaaaaaff 0xd4ffaaff
+Premultiplied:
+(0, 0) 0x00000000 0x2a0e002a 0x55380055 0x7f7f007f
+(0, 1) 0x2a000e2a 0x551c1c55 0x7f542a7f 0xaaaa38aa
+(0, 2) 0x55003855 0x7f2a547f 0xaa7171aa 0xd4d48dd4
+(0, 3) 0x7f007f7f 0xaa38aaaa 0xd48dd4d4 0xffffffff
+Unpremultiplied:
+(0, 0) 0x00000000 0x2a5500ff 0x55a800ff 0x7fff00ff
+(0, 1) 0x2a0055ff 0x555454ff 0x7fa954ff 0xaaff54ff
+(0, 2) 0x5500a8ff 0x7f54a9ff 0xaaaaaaff 0xd4ffaaff
(0, 3) 0x7f00ffff 0xaa54ffff 0xd4aaffff 0xffffffff
##
##
@@ -954,17 +948,17 @@ Returns readable pixel address at (x, y).
Input is not validated: out of bounds values of x or y trigger an assert() if
built with SK_DEBUG defined. Returns zero if Color_Type is kUnknown_SkColorType.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable generic pointer to pixel ##
#Example
- const int w = 4;
- const int h = 4;
- std::vector<SkPMColor> storage;
- storage.resize(w * h);
- SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), &storage.front(), w * 4);
+ const int w = 4;
+ const int h = 4;
+ std::vector<SkPMColor> storage;
+ storage.resize(w * h);
+ SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), &storage.front(), w * 4);
SkDebugf("pixmap.addr(1, 2) %c= &storage[1 + 2 * w]\n",
pixmap.addr(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
#StdOut
@@ -989,11 +983,11 @@ One byte corresponds to one pixel.
#Return readable unsigned 8-bit pointer to pixels ##
#Example
- const int w = 4;
- const int h = 4;
- uint8_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kGray_8_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint8_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kGray_8_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr8() %c= storage\n",
pixmap.addr8() == storage ? '=' : '!');
#StdOut
@@ -1018,11 +1012,11 @@ One word corresponds to one pixel.
#Return readable unsigned 16-bit pointer to pixels ##
#Example
- const int w = 4;
- const int h = 4;
- uint16_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kARGB_4444_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint16_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kARGB_4444_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr16() %c= storage\n",
pixmap.addr16() == storage ? '=' : '!');
#StdOut
@@ -1047,11 +1041,11 @@ One word corresponds to one pixel.
#Return readable unsigned 32-bit pointer to pixels ##
#Example
- const int w = 4;
- const int h = 4;
- uint32_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint32_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr32() %c= storage\n",
pixmap.addr32() == storage ? '=' : '!');
#StdOut
@@ -1076,11 +1070,11 @@ One word corresponds to one pixel.
#Return readable unsigned 64-bit pointer to pixels ##
#Example
- const int w = 4;
- const int h = 4;
- uint64_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint64_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr64() %c= storage\n",
pixmap.addr64() == storage ? '=' : '!');
#StdOut
@@ -1106,11 +1100,11 @@ Four words correspond to one pixel.
#Return readable unsigned 16-bit pointer to first component of pixels ##
#Example
- const int w = 4;
- const int h = 4;
- uint16_t storage[w * h * 4];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
- storage, w * 4 * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint16_t storage[w * h * 4];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
+ storage, w * 4 * sizeof(storage[0]));
SkDebugf("pixmap.addrF16() %c= storage\n",
pixmap.addrF16() == storage ? '=' : '!');
#StdOut
@@ -1134,19 +1128,19 @@ built with SK_DEBUG defined.
Will trigger an assert() if Color_Type is not kAlpha_8_SkColorType or
kGray_8_SkColorType, and is built with SK_DEBUG defined.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable unsigned 8-bit pointer to pixel at (x, y) ##
#Example
- const int w = 4;
- const int h = 4;
- uint8_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kGray_8_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
- SkDebugf("pixmap.addr8(1, 2) %c= &storage[1 + 2 * w]\n",
- pixmap.addr8(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
+ const int w = 4;
+ const int h = 4;
+ uint8_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kGray_8_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
+ SkDebugf("pixmap.addr8(1, 2) %c= &storage[1 + 2 * w]\n",
+ pixmap.addr8(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
#StdOut
pixmap.addr8(1, 2) == &storage[1 + 2 * w]
##
@@ -1168,17 +1162,17 @@ built with SK_DEBUG defined.
Will trigger an assert() if Color_Type is not kRGB_565_SkColorType or
kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable unsigned 16-bit pointer to pixel at (x, y) ##
#Example
- const int w = 4;
- const int h = 4;
- uint16_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kARGB_4444_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint16_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kARGB_4444_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr16(1, 2) %c= &storage[1 + 2 * w]\n",
pixmap.addr16(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
#StdOut
@@ -1202,17 +1196,17 @@ built with SK_DEBUG defined.
Will trigger an assert() if Color_Type is not kRGBA_8888_SkColorType or
kBGRA_8888_SkColorType, and is built with SK_DEBUG defined.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable unsigned 32-bit pointer to pixel at (x, y) ##
#Example
- const int w = 4;
- const int h = 4;
- uint32_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_8888_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint32_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_8888_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr32(1, 2) %c= &storage[1 + 2 * w]\n",
pixmap.addr32(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
#StdOut
@@ -1236,17 +1230,17 @@ built with SK_DEBUG defined.
Will trigger an assert() if Color_Type is not kRGBA_F16_SkColorType and is built
with SK_DEBUG defined.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable unsigned 64-bit pointer to pixel at (x, y) ##
#Example
- const int w = 4;
- const int h = 4;
- uint64_t storage[w * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
- storage, w * sizeof(storage[0]));
+ const int w = 4;
+ const int h = 4;
+ uint64_t storage[w * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
+ storage, w * sizeof(storage[0]));
SkDebugf("pixmap.addr64(1, 2) %c= &storage[1 + 2 * w]\n",
pixmap.addr64(1, 2) == &storage[1 + 2 * w] ? '=' : '!');
#StdOut
@@ -1273,21 +1267,21 @@ with SK_DEBUG defined.
Each unsigned 16-bit word represents one color component encoded as a half float.
Four words correspond to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return readable unsigned 16-bit pointer to pixel component at (x, y) ##
#Example
- const int w = 4;
- const int h = 4;
- const int wordsPerPixel = 4;
- const int rowWords = w * wordsPerPixel;
- uint16_t storage[rowWords * h];
- SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
- storage, rowWords * sizeof(storage[0]));
- SkDebugf("pixmap.addrF16(1, 2) %c= &storage[1 * wordsPerPixel + 2 * rowWords]\n",
- pixmap.addrF16(1, 2) == &storage[1 * wordsPerPixel + 2 * rowWords] ? '=' : '!');
+ const int w = 4;
+ const int h = 4;
+ const int wordsPerPixel = 4;
+ const int rowWords = w * wordsPerPixel;
+ uint16_t storage[rowWords * h];
+ SkPixmap pixmap(SkImageInfo::Make(w, h, kRGBA_F16_SkColorType, kPremul_SkAlphaType),
+ storage, rowWords * sizeof(storage[0]));
+ SkDebugf("pixmap.addrF16(1, 2) %c= &storage[1 * wordsPerPixel + 2 * rowWords]\n",
+ pixmap.addrF16(1, 2) == &storage[1 * wordsPerPixel + 2 * rowWords] ? '=' : '!');
#StdOut
pixmap.addrF16(1, 2) == &storage[1 * wordsPerPixel + 2 * rowWords]
##
@@ -1310,21 +1304,21 @@ Returns writable base pixel address.
#Return writable generic base pointer to pixels ##
#Example
- const int w = 4;
- const int h = 4;
- SkPMColor storage[w * h * 4];
- SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), storage, w * 4);
- SkDebugf("pixmap.writable_addr() %c= (void *)storage\n",
- pixmap.writable_addr() == (void *)storage ? '=' : '!');
- pixmap.erase(0x00000000);
- *(SkPMColor*)pixmap.writable_addr() = 0xFFFFFFFF;
- SkDebugf("pixmap.getColor(0, 1) %c= 0x00000000\n",
- pixmap.getColor(0, 1) == 0x00000000 ? '=' : '!');
- SkDebugf("pixmap.getColor(0, 0) %c= 0xFFFFFFFF\n",
+ const int w = 4;
+ const int h = 4;
+ SkPMColor storage[w * h * 4];
+ SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), storage, w * 4);
+ SkDebugf("pixmap.writable_addr() %c= (void *)storage\n",
+ pixmap.writable_addr() == (void *)storage ? '=' : '!');
+ pixmap.erase(0x00000000);
+ *(SkPMColor*)pixmap.writable_addr() = 0xFFFFFFFF;
+ SkDebugf("pixmap.getColor(0, 1) %c= 0x00000000\n",
+ pixmap.getColor(0, 1) == 0x00000000 ? '=' : '!');
+ SkDebugf("pixmap.getColor(0, 0) %c= 0xFFFFFFFF\n",
pixmap.getColor(0, 0) == 0xFFFFFFFF ? '=' : '!');
#StdOut
-pixmap.writable_addr() == (void *)storage
-pixmap.getColor(0, 1) == 0x00000000
+pixmap.writable_addr() == (void *)storage
+pixmap.getColor(0, 1) == 0x00000000
pixmap.getColor(0, 0) == 0xFFFFFFFF
##
##
@@ -1342,27 +1336,27 @@ Returns writable pixel address at (x, y).
Input is not validated: out of bounds values of x or y trigger an assert() if
built with SK_DEBUG defined. Returns zero if Color_Type is kUnknown_SkColorType.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable generic pointer to pixel ##
#Example
- const int w = 4;
- const int h = 4;
- SkPMColor storage[w * h * 4];
- SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), storage, w * 4);
- SkDebugf("pixmap.writable_addr() %c= (void *)storage\n",
- pixmap.writable_addr() == (void *)storage ? '=' : '!');
- pixmap.erase(0x00000000);
- *(SkPMColor*)pixmap.writable_addr(1, 2) = 0xFFFFFFFF;
- SkDebugf("pixmap.getColor(0, 0) %c= 0x00000000\n",
- pixmap.getColor(0, 0) == 0x00000000 ? '=' : '!');
- SkDebugf("pixmap.getColor(1, 2) %c= 0xFFFFFFFF\n",
+ const int w = 4;
+ const int h = 4;
+ SkPMColor storage[w * h * 4];
+ SkPixmap pixmap(SkImageInfo::MakeN32(w, h, kPremul_SkAlphaType), storage, w * 4);
+ SkDebugf("pixmap.writable_addr() %c= (void *)storage\n",
+ pixmap.writable_addr() == (void *)storage ? '=' : '!');
+ pixmap.erase(0x00000000);
+ *(SkPMColor*)pixmap.writable_addr(1, 2) = 0xFFFFFFFF;
+ SkDebugf("pixmap.getColor(0, 0) %c= 0x00000000\n",
+ pixmap.getColor(0, 0) == 0x00000000 ? '=' : '!');
+ SkDebugf("pixmap.getColor(1, 2) %c= 0xFFFFFFFF\n",
pixmap.getColor(1, 2) == 0xFFFFFFFF ? '=' : '!');
#StdOut
-pixmap.writable_addr() == (void *)storage
-pixmap.getColor(0, 0) == 0x00000000
+pixmap.writable_addr() == (void *)storage
+pixmap.getColor(0, 0) == 0x00000000
pixmap.getColor(1, 2) == 0xFFFFFFFF
##
##
@@ -1375,14 +1369,14 @@ pixmap.getColor(1, 2) == 0xFFFFFFFF
#Method uint8_t* writable_addr8(int x, int y) const
-Returns writable base pixel address. Result is addressable as unsigned 8-bit bytes.
-Will trigger an assert() if Color_Type is not kAlpha_8_SkColorType or
-kGray_8_SkColorType, and is built with SK_DEBUG defined.
+Returns writable pixel address at (x, y). Result is addressable as unsigned
+8-bit bytes. Will trigger an assert() if Color_Type is not kAlpha_8_SkColorType
+or kGray_8_SkColorType, and is built with SK_DEBUG defined.
One byte corresponds to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable unsigned 8-bit pointer to pixels ##
@@ -1393,21 +1387,21 @@ Altering pixels after drawing Bitmap is not guaranteed to affect subsequent
drawing on all platforms. Adding a second SkBitmap::installPixels after editing
pixel memory is safer.
##
-void draw(SkCanvas* canvas) {
- uint8_t storage[][5] = {{ 0, 0, 64, 0, 0},
- { 0, 128, 255, 128, 0},
- {64, 255, 255, 255, 64},
- { 0, 128, 255, 128, 0},
- { 0, 0, 64, 0, 0}};
- SkImageInfo imageInfo = SkImageInfo::Make(5, 5, kGray_8_SkColorType, kPremul_SkAlphaType);
- SkPixmap pixmap(imageInfo, storage[0], 5);
- SkBitmap bitmap;
- bitmap.installPixels(pixmap);
- canvas->scale(10, 10);
- canvas->drawBitmap(bitmap, 0, 0);
- *pixmap.writable_addr8(2, 2) = 0;
-// bitmap.installPixels(pixmap); // uncomment to fix on GPU
- canvas->drawBitmap(bitmap, 10, 0);
+void draw(SkCanvas* canvas) {
+ uint8_t storage[][5] = {{ 0, 0, 64, 0, 0},
+ { 0, 128, 255, 128, 0},
+ {64, 255, 255, 255, 64},
+ { 0, 128, 255, 128, 0},
+ { 0, 0, 64, 0, 0}};
+ SkImageInfo imageInfo = SkImageInfo::Make(5, 5, kGray_8_SkColorType, kPremul_SkAlphaType);
+ SkPixmap pixmap(imageInfo, storage[0], 5);
+ SkBitmap bitmap;
+ bitmap.installPixels(pixmap);
+ canvas->scale(10, 10);
+ canvas->drawBitmap(bitmap, 0, 0);
+ *pixmap.writable_addr8(2, 2) = 0;
+// bitmap.installPixels(pixmap); // uncomment to fix on GPU
+ canvas->drawBitmap(bitmap, 10, 0);
}
##
@@ -1419,14 +1413,14 @@ void draw(SkCanvas* canvas) {
#Method uint16_t* writable_addr16(int x, int y) const
-Returns writable_addr base pixel address. Result is addressable as unsigned 16-bit words.
-Will trigger an assert() if Color_Type is not kRGB_565_SkColorType or
-kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
+Returns writable_addr pixel address at (x, y). Result is addressable as unsigned
+16-bit words. Will trigger an assert() if Color_Type is not kRGB_565_SkColorType
+or kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
One word corresponds to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable unsigned 16-bit pointer to pixel ##
@@ -1436,19 +1430,19 @@ Draw a five by five bitmap, and draw it again with a center black pixel.
The low nibble of the 16-bit word is Alpha.
##
#Height 64
- uint16_t storage[][5] = {{ 0xCABF, 0xDABE, 0xCA9D, 0xC96C, 0xA39B },
- { 0xACEE, 0xA87C, 0x893A, 0x4779, 0x8708 },
- { 0x4B7C, 0x255B, 0x2559, 0x2557, 0x4656 },
- { 0x9099, 0x8128, 0x2557, 0x4124, 0x3323 },
- { 0x7547, 0x5505, 0x4434, 0x2012, 0x0000 }};
- SkImageInfo imageInfo = SkImageInfo::Make(5, 5, kARGB_4444_SkColorType, kPremul_SkAlphaType);
- SkPixmap pixmap(imageInfo, storage[0], sizeof(storage) / 5);
- SkBitmap bitmap;
- bitmap.installPixels(pixmap);
- canvas->scale(10, 10);
- canvas->drawBitmap(bitmap, 0, 0);
- *pixmap.writable_addr16(2, 2) = 0x000F;
- bitmap.installPixels(pixmap);
+ uint16_t storage[][5] = {{ 0xCABF, 0xDABE, 0xCA9D, 0xC96C, 0xA39B },
+ { 0xACEE, 0xA87C, 0x893A, 0x4779, 0x8708 },
+ { 0x4B7C, 0x255B, 0x2559, 0x2557, 0x4656 },
+ { 0x9099, 0x8128, 0x2557, 0x4124, 0x3323 },
+ { 0x7547, 0x5505, 0x4434, 0x2012, 0x0000 }};
+ SkImageInfo imageInfo = SkImageInfo::Make(5, 5, kARGB_4444_SkColorType, kPremul_SkAlphaType);
+ SkPixmap pixmap(imageInfo, storage[0], sizeof(storage) / 5);
+ SkBitmap bitmap;
+ bitmap.installPixels(pixmap);
+ canvas->scale(10, 10);
+ canvas->drawBitmap(bitmap, 0, 0);
+ *pixmap.writable_addr16(2, 2) = 0x000F;
+ bitmap.installPixels(pixmap);
canvas->drawBitmap(bitmap, 10, 0);
##
@@ -1460,35 +1454,36 @@ The low nibble of the 16-bit word is Alpha.
#Method uint32_t* writable_addr32(int x, int y) const
-Returns writable base pixel address. Result is addressable as unsigned 32-bit words.
-Will trigger an assert() if Color_Type is not kRGBA_8888_SkColorType or
-kBGRA_8888_SkColorType, and is built with SK_DEBUG defined.
+Returns writable pixel address at (x, y). Result is addressable as unsigned
+32-bit words. Will trigger an assert() if Color_Type is not
+kRGBA_8888_SkColorType or kBGRA_8888_SkColorType, and is built with SK_DEBUG
+defined.
One word corresponds to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable unsigned 32-bit pointer to pixel ##
#Example
#Image 4
#Height 72
- std::vector<int32_t> pixels;
- pixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
- image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
- for (int y = 0; y < pixmap.height() / 2; ++y) {
- for (int x = 0; x < pixmap.width(); ++x) {
- if ((x & 4) == (y & 4)) {
- SkTSwap(*pixmap.writable_addr32(x, y),
- *pixmap.writable_addr32(pixmap.width() - x, pixmap.height() - y));
- }
- }
- }
- SkBitmap bitmap;
- bitmap.installPixels(pixmap);
+ std::vector<int32_t> pixels;
+ pixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(SkImageInfo::Make(image->width(), image->height(), kN32_SkColorType,
+ image->alphaType()), (const void*) &pixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
+ for (int y = 0; y < pixmap.height() / 2; ++y) {
+ for (int x = 0; x < pixmap.width(); ++x) {
+ if ((x & 4) == (y & 4)) {
+ SkTSwap(*pixmap.writable_addr32(x, y),
+ *pixmap.writable_addr32(pixmap.width() - x, pixmap.height() - y));
+ }
+ }
+ }
+ SkBitmap bitmap;
+ bitmap.installPixels(pixmap);
canvas->drawBitmap(bitmap, 0, 0);
##
@@ -1500,29 +1495,29 @@ One word corresponds to one pixel.
#Method uint64_t* writable_addr64(int x, int y) const
-Returns writable base pixel address. Result is addressable as unsigned 64-bit words.
-Will trigger an assert() if Color_Type is not kRGBA_F16_SkColorType and is built
-with SK_DEBUG defined.
+Returns writable pixel address at (x, y). Result is addressable as unsigned
+64-bit words. Will trigger an assert() if Color_Type is not
+kRGBA_F16_SkColorType and is built with SK_DEBUG defined.
One word corresponds to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable unsigned 64-bit pointer to pixel ##
#Example
- SkImageInfo info = SkImageInfo::Make(3, 3, kRGBA_F16_SkColorType, kPremul_SkAlphaType);
- uint64_t storage[9];
- SkPixmap pixmap(info, storage, 3 * sizeof(uint64_t));
- SkColor4f c4 { 1, 0.45f, 0.25f, 0.65f };
- pixmap.erase(c4);
- SkBitmap bitmap;
- canvas->scale(10, 10);
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 0, 0);
- *pixmap.writable_addr64(1, 1) |= 0x00ff000000000000LL;
- bitmap.installPixels(pixmap);
+ SkImageInfo info = SkImageInfo::Make(3, 3, kRGBA_F16_SkColorType, kPremul_SkAlphaType);
+ uint64_t storage[9];
+ SkPixmap pixmap(info, storage, 3 * sizeof(uint64_t));
+ SkColor4f c4 { 1, 0.45f, 0.25f, 0.65f };
+ pixmap.erase(c4);
+ SkBitmap bitmap;
+ canvas->scale(10, 10);
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 0, 0);
+ *pixmap.writable_addr64(1, 1) |= 0x00ff000000000000LL;
+ bitmap.installPixels(pixmap);
canvas->drawBitmap(bitmap, 10, 0);
##
@@ -1534,15 +1529,15 @@ One word corresponds to one pixel.
#Method uint16_t* writable_addrF16(int x, int y) const
-Returns writable base pixel address. Result is addressable as unsigned 16-bit words.
-Will trigger an assert() if Color_Type is not kRGBA_F16_SkColorType and is built
-with SK_DEBUG defined.
+Returns writable pixel address at (x, y). Result is addressable as unsigned
+16-bit words. Will trigger an assert() if Color_Type is not
+kRGBA_F16_SkColorType and is built with SK_DEBUG defined.
Each word represents one color component encoded as a half float.
Four words correspond to one pixel.
-#Param x positive column index less than width() ##
-#Param y positive row index less than height() ##
+#Param x column index, zero or greater, and less than width() ##
+#Param y row index, zero or greater, and less than height() ##
#Return writable unsigned 16-bit pointer to first component of pixel ##
@@ -1552,23 +1547,23 @@ Four words correspond to one pixel.
Left bitmap is drawn with two pixels defined in half float format. Right bitmap
is drawn after overwriting bottom half float color with top half float color.
##
- SkImageInfo info = SkImageInfo::Make(1, 2, kRGBA_F16_SkColorType, kPremul_SkAlphaType);
- uint16_t storage[2][4];
- SkPixmap pixmap(info, storage[0], sizeof(uint64_t));
- SkIRect topPixelBounds = {0, 0, 1, 1};
- pixmap.erase({ 0.65f, 0.45f, 0.25f, 1 }, &topPixelBounds);
- SkIRect bottomPixelBounds = {0, 1, 1, 2};
- pixmap.erase({ 0.25f, 0.65f, 0.45f, 1 }, &bottomPixelBounds);
- SkBitmap bitmap;
- canvas->scale(20, 20);
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 0, 0);
- uint16_t* pixel2 = pixmap.writable_addrF16(0, 1);
- for (int i = 0; i < 4; ++i) {
- pixel2[i] = storage[0][i];
- }
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 4, 0);
+ SkImageInfo info = SkImageInfo::Make(1, 2, kRGBA_F16_SkColorType, kPremul_SkAlphaType);
+ uint16_t storage[2][4];
+ SkPixmap pixmap(info, storage[0], sizeof(uint64_t));
+ SkIRect topPixelBounds = {0, 0, 1, 1};
+ pixmap.erase({ 0.65f, 0.45f, 0.25f, 1 }, &topPixelBounds);
+ SkIRect bottomPixelBounds = {0, 1, 1, 2};
+ pixmap.erase({ 0.25f, 0.65f, 0.45f, 1 }, &bottomPixelBounds);
+ SkBitmap bitmap;
+ canvas->scale(20, 20);
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 0, 0);
+ uint16_t* pixel2 = pixmap.writable_addrF16(0, 1);
+ for (int i = 0; i < 4; ++i) {
+ pixel2[i] = storage[0][i];
+ }
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 4, 0);
##
#SeeAlso writable_addr writable_addr8 writable_addr16 writable_addr32 writable_addr64 addr() addrF16
@@ -1584,12 +1579,13 @@ is drawn after overwriting bottom half float color with top half float color.
#Method bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY, SkTransferFunctionBehavior behavior) const
-Copies a Rect of pixels to dstPixels. Copy starts at (srcX, srcY), and does not
-exceed
+Copies a Rect of pixels to dstPixels. Copy starts at (srcX, srcY), and does not exceed
#Formula
(this->width(), this->height())
##
-. dstInfo specifies width, height, Color_Type, Alpha_Type, and
+.
+
+dstInfo specifies width, height, Color_Type, Alpha_Type, and
Color_Space of destination. dstRowBytes specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
dstInfo.addr() equals nullptr, or dstRowBytes is less than dstInfo.minRowBytes.
@@ -1604,7 +1600,11 @@ false if pixel conversion is not possible.
srcX and srcY may be negative to copy only top or left of source. Returns
false if width() or height() is zero or negative. Returns false if
#Formula
-abs(srcX) >= this->width() || abs(scrY) >= this->height()
+abs(srcX) >= this->width()
+##
+, or if
+#Formula
+abs(srcY) >= this->height()
##
.
@@ -1629,17 +1629,17 @@ pixels are treated as if they are linear, regardless of their encoding.
void draw(SkCanvas* canvas) {
SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height(),
canvas->imageInfo().colorSpace() ? SkColorSpace::MakeSRGB() : nullptr);
- std::vector<int32_t> srcPixels;
- srcPixels.resize(image->height() * image->width() * 4);
- SkPixmap pixmap(info, (const void*) &srcPixels.front(), image->width() * 4);
- image->readPixels(pixmap, 0, 0);
+ std::vector<int32_t> srcPixels;
+ srcPixels.resize(image->height() * image->width() * 4);
+ SkPixmap pixmap(info, (const void*) &srcPixels.front(), image->width() * 4);
+ image->readPixels(pixmap, 0, 0);
SkTransferFunctionBehavior behavior = canvas->imageInfo().colorSpace() ?
SkTransferFunctionBehavior::kRespect : SkTransferFunctionBehavior::kIgnore;
- std::vector<int32_t> dstPixels;
- dstPixels.resize(image->height() * image->width() * 4);
- int offset = 0;
- for (auto behavior : { SkTransferFunctionBehavior::kRespect,
- SkTransferFunctionBehavior::kIgnore} ) {
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(image->height() * image->width() * 4);
+ int offset = 0;
+ for (auto behavior : { SkTransferFunctionBehavior::kRespect,
+ SkTransferFunctionBehavior::kIgnore} ) {
pixmap.readPixels(info, &dstPixels.front(), image->width() * 4, offset, 0, behavior);
offset += 128;
}
@@ -1663,7 +1663,9 @@ exceed
#Formula
(this->width(), this->height())
##
-. dstInfo specifies width, height, Color_Type, Alpha_Type, and
+.
+
+dstInfo specifies width, height, Color_Type, Alpha_Type, and
Color_Space of destination. dstRowBytes specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
dstInfo.addr() equals nullptr, or dstRowBytes is less than dstInfo.minRowBytes.
@@ -1689,28 +1691,28 @@ Returns false if this->width() or this->height() is zero or negative.
Transferring the gradient from 8 bits per component to 4 bits per component
creates visible banding.
##
- std::vector<int32_t> pixels;
- const int width = 256;
- const int height = 64;
- pixels.resize(height * width * 4);
- SkImageInfo srcInfo = SkImageInfo::MakeN32Premul(width, height);
- SkPixmap srcPixmap(srcInfo, (const void*) &pixels.front(), width * 4);
- SkColor gradColors[] = { 0xFFAA3300, 0x7F881122 };
- SkPoint gradPoints[] = { { 0, 0 }, { 256, 0 } };
- SkPaint paint;
- paint.setShader(SkGradientShader::MakeLinear(gradPoints, gradColors, nullptr,
- SK_ARRAY_COUNT(gradColors), SkShader::kClamp_TileMode));
- SkBitmap bitmap;
- bitmap.installPixels(srcPixmap);
- SkCanvas srcCanvas(bitmap);
- srcCanvas.drawRect(SkRect::MakeWH(width, height), paint);
- canvas->drawBitmap(bitmap, 0, 0);
- std::vector<int32_t> dstPixels;
- dstPixels.resize(height * width * 2);
- SkImageInfo dstInfo = srcInfo.makeColorType(kARGB_4444_SkColorType);
- srcPixmap.readPixels(dstInfo, &dstPixels.front(), width * 2);
- SkPixmap dstPixmap(dstInfo, &dstPixels.front(), width * 2);
- bitmap.installPixels(dstPixmap);
+ std::vector<int32_t> pixels;
+ const int width = 256;
+ const int height = 64;
+ pixels.resize(height * width * 4);
+ SkImageInfo srcInfo = SkImageInfo::MakeN32Premul(width, height);
+ SkPixmap srcPixmap(srcInfo, (const void*) &pixels.front(), width * 4);
+ SkColor gradColors[] = { 0xFFAA3300, 0x7F881122 };
+ SkPoint gradPoints[] = { { 0, 0 }, { 256, 0 } };
+ SkPaint paint;
+ paint.setShader(SkGradientShader::MakeLinear(gradPoints, gradColors, nullptr,
+ SK_ARRAY_COUNT(gradColors), SkShader::kClamp_TileMode));
+ SkBitmap bitmap;
+ bitmap.installPixels(srcPixmap);
+ SkCanvas srcCanvas(bitmap);
+ srcCanvas.drawRect(SkRect::MakeWH(width, height), paint);
+ canvas->drawBitmap(bitmap, 0, 0);
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(height * width * 2);
+ SkImageInfo dstInfo = srcInfo.makeColorType(kARGB_4444_SkColorType);
+ srcPixmap.readPixels(dstInfo, &dstPixels.front(), width * 2);
+ SkPixmap dstPixmap(dstInfo, &dstPixels.front(), width * 2);
+ bitmap.installPixels(dstPixmap);
canvas->drawBitmap(bitmap, 0, 128);
##
@@ -1728,7 +1730,9 @@ exceed
#Formula
(this->width(), this->height())
##
-. dstInfo specifies width, height, Color_Type, Alpha_Type, and
+.
+
+dstInfo specifies width, height, Color_Type, Alpha_Type, and
Color_Space of destination. dstRowBytes specifics the gap from one destination
row to the next. Returns true if pixels are copied. Returns false if
dstInfo.addr() equals nullptr, or dstRowBytes is less than dstInfo.minRowBytes.
@@ -1743,7 +1747,11 @@ false if pixel conversion is not possible.
srcX and srcY may be negative to copy only top or left of source. Returns
false if this->width() or this->height() is zero or negative. Returns false if
#Formula
-abs(srcX) >= this->width() || abs(scrY) >= this->height()
+abs(srcX) >= this->width()
+##
+, or if
+#Formula
+abs(srcY) >= this->height()
##
.
@@ -1757,23 +1765,23 @@ abs(srcX) >= this->width() || abs(scrY) >= this->height()
#Example
#Image 3
-void draw(SkCanvas* canvas) {
- SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
- std::vector<int32_t> srcPixels;
- const int rowBytes = image->width() * 4;
- srcPixels.resize(image->height() * rowBytes);
- SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
- image->readPixels(pixmap, 0, 0);
- for (int offset : { 32, 64, 96 } ) {
- std::vector<int32_t> dstPixels;
- dstPixels.resize(image->height() * rowBytes);
- pixmap.readPixels(info, &dstPixels.front(), rowBytes, offset, 0);
- SkBitmap bitmap;
- SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
- bitmap.installPixels(dstmap);
- canvas->translate(32, 32);
- canvas->drawBitmap(bitmap, 0, 0);
- }
+void draw(SkCanvas* canvas) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
+ std::vector<int32_t> srcPixels;
+ const int rowBytes = image->width() * 4;
+ srcPixels.resize(image->height() * rowBytes);
+ SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
+ image->readPixels(pixmap, 0, 0);
+ for (int offset : { 32, 64, 96 } ) {
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(image->height() * rowBytes);
+ pixmap.readPixels(info, &dstPixels.front(), rowBytes, offset, 0);
+ SkBitmap bitmap;
+ SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
+ bitmap.installPixels(dstmap);
+ canvas->translate(32, 32);
+ canvas->drawBitmap(bitmap, 0, 0);
+ }
}
##
@@ -1801,7 +1809,11 @@ false if pixel conversion is not possible.
srcX and srcY may be negative to copy only top or left of source. Returns
false this->width() or this->height() is zero or negative. Returns false if
#Formula
-abs(srcX) >= this->width() || abs(scrY) >= this->height()
+abs(srcX) >= this->width()
+##
+, or if
+#Formula
+abs(srcY) >= this->height()
##
.
@@ -1813,23 +1825,23 @@ abs(srcX) >= this->width() || abs(scrY) >= this->height()
#Example
#Image 3
-void draw(SkCanvas* canvas) {
- SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
- std::vector<int32_t> srcPixels;
- const int rowBytes = image->width() * 4;
- srcPixels.resize(image->height() * rowBytes);
- SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
- image->readPixels(pixmap, 0, 0);
- for (int offset : { 32, 64, 96 } ) {
- std::vector<int32_t> dstPixels;
- dstPixels.resize(image->height() * rowBytes);
- SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
- pixmap.readPixels(dstmap, offset, 0);
- SkBitmap bitmap;
- bitmap.installPixels(dstmap);
- canvas->translate(32, 32);
- canvas->drawBitmap(bitmap, 0, 0);
- }
+void draw(SkCanvas* canvas) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
+ std::vector<int32_t> srcPixels;
+ const int rowBytes = image->width() * 4;
+ srcPixels.resize(image->height() * rowBytes);
+ SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
+ image->readPixels(pixmap, 0, 0);
+ for (int offset : { 32, 64, 96 } ) {
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(image->height() * rowBytes);
+ SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
+ pixmap.readPixels(dstmap, offset, 0);
+ SkBitmap bitmap;
+ bitmap.installPixels(dstmap);
+ canvas->translate(32, 32);
+ canvas->drawBitmap(bitmap, 0, 0);
+ }
}
##
@@ -1861,23 +1873,23 @@ Returns false if this->width() or this->height() is zero or negative.
#Example
#Image 3
-void draw(SkCanvas* canvas) {
- SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
- std::vector<int32_t> srcPixels;
- const int rowBytes = image->width() * 4;
- srcPixels.resize(image->height() * rowBytes);
- SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
- image->readPixels(pixmap, 0, 0);
- for (int index = 0; index < 3; ++index ) {
- std::vector<int32_t> dstPixels;
- dstPixels.resize(image->height() * rowBytes);
- SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
- pixmap.readPixels(dstmap);
- SkBitmap bitmap;
- bitmap.installPixels(dstmap);
- canvas->translate(32, 32);
- canvas->drawBitmap(bitmap, 0, 0);
- }
+void draw(SkCanvas* canvas) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
+ std::vector<int32_t> srcPixels;
+ const int rowBytes = image->width() * 4;
+ srcPixels.resize(image->height() * rowBytes);
+ SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
+ image->readPixels(pixmap, 0, 0);
+ for (int index = 0; index < 3; ++index ) {
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(image->height() * rowBytes);
+ SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
+ pixmap.readPixels(dstmap);
+ SkBitmap bitmap;
+ bitmap.installPixels(dstmap);
+ canvas->translate(32, 32);
+ canvas->drawBitmap(bitmap, 0, 0);
+ }
}
##
@@ -1919,25 +1931,25 @@ kHigh_SkFilterQuality is slowest, typically implemented with Filter_Quality_BiCu
#Example
#Image 3
-void draw(SkCanvas* canvas) {
- SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
- std::vector<int32_t> srcPixels;
- int rowBytes = image->width() * 4;
- srcPixels.resize(image->height() * rowBytes);
- SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
- image->readPixels(pixmap, 0, 0);
- for (int offset : { 32, 64, 96 } ) {
- info = SkImageInfo::MakeN32Premul(image->width() + offset, image->height());
- rowBytes = info.width() * 4;
- std::vector<int32_t> dstPixels;
- dstPixels.resize(image->height() * rowBytes);
- SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
- pixmap.scalePixels(dstmap, kMedium_SkFilterQuality);
- SkBitmap bitmap;
- bitmap.installPixels(dstmap);
- canvas->translate(32, 32);
- canvas->drawBitmap(bitmap, 0, 0);
- }
+void draw(SkCanvas* canvas) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
+ std::vector<int32_t> srcPixels;
+ int rowBytes = image->width() * 4;
+ srcPixels.resize(image->height() * rowBytes);
+ SkPixmap pixmap(info, (const void*) &srcPixels.front(), rowBytes);
+ image->readPixels(pixmap, 0, 0);
+ for (int offset : { 32, 64, 96 } ) {
+ info = SkImageInfo::MakeN32Premul(image->width() + offset, image->height());
+ rowBytes = info.width() * 4;
+ std::vector<int32_t> dstPixels;
+ dstPixels.resize(image->height() * rowBytes);
+ SkPixmap dstmap(info, &dstPixels.front(), rowBytes);
+ pixmap.scalePixels(dstmap, kMedium_SkFilterQuality);
+ SkBitmap bitmap;
+ bitmap.installPixels(dstmap);
+ canvas->translate(32, 32);
+ canvas->drawBitmap(bitmap, 0, 0);
+ }
}
##
@@ -1959,15 +1971,15 @@ not intersect bounds().
#Return true if pixels are changed ##
#Example
- uint32_t storage[2];
- SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
- SkPixmap pixmap(info, storage, info.minRowBytes());
- pixmap.erase(SK_ColorBLUE, {0, 0, 1, 1});
- pixmap.erase(SK_ColorRED, {0, 1, 1, 2});
- SkBitmap bitmap;
- canvas->scale(20, 20);
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 0, 0);
+ uint32_t storage[2];
+ SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
+ SkPixmap pixmap(info, storage, info.minRowBytes());
+ pixmap.erase(SK_ColorBLUE, {0, 0, 1, 1});
+ pixmap.erase(SK_ColorRED, {0, 1, 1, 2});
+ SkBitmap bitmap;
+ canvas->scale(20, 20);
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 0, 0);
##
#SeeAlso SkBitmap::erase SkCanvas::clear SkCanvas::drawColor
@@ -1987,14 +1999,14 @@ is empty.
#Return true if pixels are changed ##
#Example
- uint32_t storage[2];
- SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
- SkPixmap pixmap(info, storage, info.minRowBytes());
- pixmap.erase(SK_ColorBLUE);
- SkBitmap bitmap;
- canvas->scale(20, 20);
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 0, 0);
+ uint32_t storage[2];
+ SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
+ SkPixmap pixmap(info, storage, info.minRowBytes());
+ pixmap.erase(SK_ColorBLUE);
+ SkBitmap bitmap;
+ canvas->scale(20, 20);
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 0, 0);
##
#SeeAlso SkBitmap::erase SkCanvas::clear SkCanvas::drawColor
@@ -2016,17 +2028,17 @@ not intersect bounds(), or if subset is nullptr and bounds() is empty.
#Return true if pixels are changed ##
#Example
- uint32_t storage[2];
- SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
- SkPixmap pixmap(info, storage, info.minRowBytes());
- SkIRect topPixelBounds = {0, 0, 1, 1};
- pixmap.erase({ 0.65f, 0.45f, 0.25f, 1 }, &topPixelBounds);
- SkIRect bottomPixelBounds = {0, 1, 1, 2};
- pixmap.erase({ 0.25f, 0.65f, 0.45f, 1 }, &bottomPixelBounds);
- SkBitmap bitmap;
- canvas->scale(20, 20);
- bitmap.installPixels(pixmap);
- canvas->drawBitmap(bitmap, 0, 0);
+ uint32_t storage[2];
+ SkImageInfo info = SkImageInfo::MakeN32Premul(1, 2);
+ SkPixmap pixmap(info, storage, info.minRowBytes());
+ SkIRect topPixelBounds = {0, 0, 1, 1};
+ pixmap.erase({ 0.65f, 0.45f, 0.25f, 1 }, &topPixelBounds);
+ SkIRect bottomPixelBounds = {0, 1, 1, 2};
+ pixmap.erase({ 0.25f, 0.65f, 0.45f, 1 }, &bottomPixelBounds);
+ SkBitmap bitmap;
+ canvas->scale(20, 20);
+ bitmap.installPixels(pixmap);
+ canvas->drawBitmap(bitmap, 0, 0);
##
#SeeAlso SkBitmap::erase SkCanvas::clear SkCanvas::drawColor
diff --git a/docs/usingBookmaker.bmh b/docs/usingBookmaker.bmh
index 16775c5716..4e1f84b864 100644
--- a/docs/usingBookmaker.bmh
+++ b/docs/usingBookmaker.bmh
@@ -10,7 +10,9 @@ Visual_Studio
How to use the Bookmaker utility.
-Install #A Go # https://golang.org/doc/install ## if needed.
+Install
+#A Go # https://golang.org/doc/install ##
+ if needed.
Get the fiddle command line interface tool.
By default this will appear in your home directory.
@@ -132,7 +134,9 @@ to write the updated SkXXX.h to the current directory.
#Subtopic Bugs
-Bookmaker bugs are tracked #A here # bug.skia.org/6898 ##.
+Bookmaker bugs are tracked
+#A here # bug.skia.org/6898 ##
+.
##