am bc47abe4: Merge "Make sure shaders use a color model compatible with the destination." into lmp-mr1-dev

* commit 'bc47abe4b444d0386d1d939e4a223a976fade565':
  Make sure shaders use a color model compatible with the destination.
This commit is contained in:
Diego Perez
2015-05-06 23:53:41 +00:00
committed by Android Git Automerger
4 changed files with 19 additions and 8 deletions

View File

@ -23,6 +23,8 @@ import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
import android.graphics.Shader.TileMode; import android.graphics.Shader.TileMode;
import java.awt.image.ColorModel;
/** /**
* Delegate implementing the native methods of android.graphics.BitmapShader * Delegate implementing the native methods of android.graphics.BitmapShader
* *
@ -124,6 +126,11 @@ public class BitmapShader_Delegate extends Shader_Delegate {
localMatrix = new java.awt.geom.AffineTransform(); localMatrix = new java.awt.geom.AffineTransform();
} }
if (!colorModel.isCompatibleRaster(mImage.getRaster())) {
// Fallback to the default ARGB color model
colorModel = ColorModel.getRGBdefault();
}
return new BitmapShaderContext(canvasMatrix, localMatrix, colorModel); return new BitmapShaderContext(canvasMatrix, localMatrix, colorModel);
} }
@ -153,8 +160,9 @@ public class BitmapShader_Delegate extends Shader_Delegate {
@Override @Override
public java.awt.image.Raster getRaster(int x, int y, int w, int h) { public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
java.awt.image.BufferedImage.TYPE_INT_ARGB); mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
mColorModel.isAlphaPremultiplied(), null);
int[] data = new int[w*h]; int[] data = new int[w*h];

View File

@ -172,8 +172,9 @@ public final class LinearGradient_Delegate extends Gradient_Delegate {
@Override @Override
public java.awt.image.Raster getRaster(int x, int y, int w, int h) { public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
java.awt.image.BufferedImage.TYPE_INT_ARGB); mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
mColorModel.isAlphaPremultiplied(), null);
int[] data = new int[w*h]; int[] data = new int[w*h];

View File

@ -160,8 +160,9 @@ public class RadialGradient_Delegate extends Gradient_Delegate {
@Override @Override
public java.awt.image.Raster getRaster(int x, int y, int w, int h) { public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
java.awt.image.BufferedImage.TYPE_INT_ARGB); mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
mColorModel.isAlphaPremultiplied(), null);
int[] data = new int[w*h]; int[] data = new int[w*h];

View File

@ -152,8 +152,9 @@ public class SweepGradient_Delegate extends Gradient_Delegate {
@Override @Override
public java.awt.image.Raster getRaster(int x, int y, int w, int h) { public java.awt.image.Raster getRaster(int x, int y, int w, int h) {
java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(
java.awt.image.BufferedImage.TYPE_INT_ARGB); mColorModel, mColorModel.createCompatibleWritableRaster(w, h),
mColorModel.isAlphaPremultiplied(), null);
int[] data = new int[w*h]; int[] data = new int[w*h];