Skip to content
This repository was archived by the owner on Nov 14, 2018. It is now read-only.
5 changes: 5 additions & 0 deletions api/current.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ package androidx.content {

public final class ContextKt {
ctor public ContextKt();
method public static java.util.List<java.lang.String> getPermissions(android.content.Context);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this change?

Copy link
Copy Markdown
Author

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

method public static void withStyledAttributes(android.content.Context, android.util.AttributeSet? set = "null", int[] attrs, @AttrRes int defStyleAttr = "0", @StyleRes int defStyleRes = "0", kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
method public static void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
}
Expand Down Expand Up @@ -101,11 +102,15 @@ package androidx.graphics {
public final class BitmapKt {
ctor public BitmapKt();
method public static android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static android.graphics.Bitmap! clip(android.graphics.Bitmap, int x, int y, int width, int height);
method public static android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = "Bitmap.Config.ARGB_8888");
method @RequiresApi(26) public static android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = "Bitmap.Config.ARGB_8888", boolean hasAlpha = "true", android.graphics.ColorSpace colorSpace = "ColorSpace.get(ColorSpace.Named.SRGB)");
method public static operator int get(android.graphics.Bitmap, int x, int y);
method public static android.graphics.Bitmap! rotate(android.graphics.Bitmap, float degrees, float px, float py);
method public static android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, boolean filter = "true");
method public static operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
method public static android.graphics.Bitmap skew(android.graphics.Bitmap, float kx, float ky, float px = "0f", float py = "0f");
method public static error.NonExistentClass toByteArray(android.graphics.Bitmap, android.graphics.Bitmap.CompressFormat format = "CompressFormat.JPEG", @IntRange(from=0L, to=100L) int quality = "100");
}

public final class CanvasKt {
Expand Down
58 changes: 58 additions & 0 deletions src/main/java/androidx/graphics/Bitmap.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should run klint, your formatting is inconsistent (x:Int vs with: Int for instance)
I would rather call this method crop()

= 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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no pivot point in the API

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry for that, i added it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The 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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The 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)