by sooraj.rit » Wed Jan 14, 2009 10:50 am
Hi , please see this code, which can be used to control contrast of an image as well as its transparency/opacity.
package img.control;
import java.io.*;
import java.nio.Buffer;
import org.apache.http.entity.InputStreamEntity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
//import android.view.MotionEvent;
import android.view.View;
import img.control.R;
import android.app.Activity;
import android.content.Context;
import android.view.KeyEvent;
public class ImgControl extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new ImgView(this));
}
private static class ImgView extends View
{
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private ColorMatrix mCM = new ColorMatrix();
private Bitmap mBitmap;
private float mAngle = 0;
private Drawable imgobj;
public ImgView(Context context)
{
super(context);
setFocusable(true);
mBitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.location );
}
private static ColorMatrix setContrast( float contrast )
{
float scale = contrast + 1.f;
float translate = (-.5f * scale + .5f) * 255.f;
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
scale, 0, 0, 0, translate,
0, scale, 0, 0, translate,
0, 0, scale, 0, translate,
0, 0, 0, 1, 0 });
return cm;
}
@Override protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
float x = 5;
float y = 5;
canvas.drawColor(Color.WHITE);
mPaint.setColorFilter(null);
canvas.drawBitmap(mBitmap, x, y, mPaint);
invalidate();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch( keyCode )
{
case KeyEvent.KEYCODE_DPAD_LEFT:
{
SetImgAlpha(true);
break;
}
case KeyEvent.KEYCODE_DPAD_RIGHT:
{
SetImgAlpha(false);
break;
}
case KeyEvent.KEYCODE_DPAD_UP:
{
ProcessContrast( true);
break;
}
case KeyEvent.KEYCODE_DPAD_DOWN:
{
ProcessContrast(false);
break;
}
}
return true;
}
private void SetImgAlpha( boolean bvar )
{
int nAlpha = mPaint.getAlpha();
// Adjust alpha
if( bvar )
{
nAlpha += 5;
if( nAlpha >= 255 )
{
nAlpha = 255;
}
}
else
{
nAlpha -= 5;
if( nAlpha <= 0)
{
nAlpha = 0;
}
}
mPaint.setAlpha(nAlpha);
invalidate();
return;
}
private void ProcessContrast( boolean bvar )
{
if( bvar )
{
mAngle += 10;
if (mAngle > 180)
{
mAngle = 180;
}
}
else
{
mAngle -= 10;
if (mAngle < 0 )
{
mAngle = 0;
}
}
// //convert our animated angle [-180...180] to a contrast value of [-1..1]
float contrast = mAngle / 180.f;
mCM = setContrast( contrast );
mPaint.setColorFilter(new ColorMatrixColorFilter(mCM));
invalidate();
}
}
}