-
Notifications
You must be signed in to change notification settings - Fork 560
Bitmap extensions #418
base: master
Are you sure you want to change the base?
Bitmap extensions #418
Changes from 6 commits
5717646
acfc8b4
1e6bbfa
29b2a18
d1f464d
02fb227
8086a2d
4f57ec8
e421387
4a22496
3517ae4
b855f4c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,10 +19,15 @@ | |
| package androidx.graphics | ||
|
|
||
| import android.graphics.Bitmap | ||
| import android.graphics.Bitmap.CompressFormat | ||
| import android.graphics.Bitmap.createBitmap | ||
| import android.graphics.Canvas | ||
| import android.graphics.ColorSpace | ||
| import android.graphics.Matrix | ||
| import android.support.annotation.ColorInt | ||
| import android.support.annotation.IntRange | ||
| import android.support.annotation.RequiresApi | ||
| import java.io.ByteArrayOutputStream | ||
|
|
||
| /** | ||
| * Creates a new [Canvas] to draw on this bitmap and executes the specified | ||
|
|
@@ -111,3 +116,56 @@ inline fun createBitmap( | |
| ): Bitmap { | ||
| return Bitmap.createBitmap(width, height, config, hasAlpha, colorSpace) | ||
| } | ||
|
|
||
|
|
||
| /** | ||
| * Returns ByteArray compressed from this bitmap with the specified [format] | ||
| * and [quality]. | ||
| * | ||
| * @param format The format of bitmap. | ||
| * @param quality Hint to the compressor, 0-100. 0 meaning compress for small size, 100 meaning compress for max quality. | ||
| * @return ByteArray | ||
| */ | ||
| inline fun Bitmap.toByteArray(format:CompressFormat = CompressFormat.JPEG, @IntRange(from = 0, to = 100) quality: Int=100) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I still don't find compressing to a byte array useful. Compressing directly into a stream seems the more common case |
||
| = ByteArrayOutputStream().also { compress(format, quality, it) }.toByteArray() | ||
|
|
||
| /** | ||
| * Creates a new bitmap, clipped from this bitmap. If the specified [x],[y], | ||
| * [width],[height] are the same as the current width and height of this bitmap, | ||
| * this bitmap is returned and no new bitmap is created. | ||
| * | ||
| * @param x The x coordinate of the first pixel. | ||
| * @param y The y coordinate of the first pixel. | ||
| * @param width The width. | ||
| * @param height The height. | ||
| * @return the clipped bitmap | ||
| */ | ||
| inline fun Bitmap.clip(x:Int, y:Int, width: Int, height: Int) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should run klint, your formatting is inconsistent ( |
||
| = Bitmap.createBitmap(this, x, y, width, height) | ||
|
|
||
| /** | ||
| * Creates a new bitmap, skewed from this bitmap by [kx] and [ky], | ||
| * with a pivot point at ([px], [py]). The pivot point is the | ||
| * coordinate that should remain unchanged by the specified transformation. | ||
| * | ||
| * @param kx The skew factor of x. | ||
| * @param ky The skew factor of y. | ||
| * @param px The x coordinate of the pivot point. | ||
| * @param py The y coordinate of the pivot point. | ||
| * @return the skewed bitmap | ||
| */ | ||
| inline fun Bitmap.skew(kx:Float, ky:Float, px:Float = 0f, py:Float = 0f):Bitmap | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove, this is not useful |
||
| = createBitmap(this, 0, 0 , width, height, Matrix().apply { setSkew(kx, ky, px, py) }, true) | ||
|
|
||
| /** | ||
| * Creates a new bitmap, rotated from this bitmap by [degrees] - the specified number of degrees, | ||
| * with a pivot point at ([px], [py]). The pivot point is the coordinate that should remain | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There's no pivot point in the API
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sorry for that, i added it.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the change. The pivot point should probably be set to width/2.0f and height/2.0f by default.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added the default pivot point. |
||
| * unchanged by the specified transformation. | ||
| * | ||
| * @param degrees The number of degrees. | ||
| * @param px The x coordinate of the pivot point. | ||
| * @param py The y coordinate of the pivot point. | ||
| * @return the rotated bitmap | ||
| */ | ||
| inline fun Bitmap.rotate(degrees:Float, px: Float, py: Float) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure this is usefuul |
||
| = createBitmap(this, 0, 0, width, height, Matrix().apply { setRotate(degrees, px, py) }, true) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why this change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry, it's a mistake, I have already removed it