大佬教程收集整理的这篇文章主要介绍了android – 圆形鱼眼扭曲扭曲270度,逆时针扭转90度?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import java.io.bufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import com.tecmark.HorizontalSlider.onProgresschangelistener; import android.content.Context; import android.graphics.bitmap; import android.graphics.bitmapFactory; import android.graphics.bitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuffXfermode; import android.graphics.PorterDuff.Mode; import android.graphics.Shader.TileMode; import android.os.Environment; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.onClickListener; import android.widget.button; import android.widget.ImageView; public class TouchView extends View{ private File tempFile; private byte[] imageArray; private Bitmap bgr; private Bitmap bm; private Bitmap bgr2 = null;; private Paint pTouch; privat@R_618_9473@ centreX = 1; privat@R_618_9473@ centreY = 1; privat@R_618_9473@ radius = 50; privat@R_618_9473@ Progress; private static final String TAG = "*********TouchView"; private Filters f = null; public TouchView(Context context) { super(context); // TouchView(context,null); } public TouchView(Context context,AttributeSet attr) { super(context,attr); tempFile = new File(Environment.getExternalStorageDirectory(). getAbsolutePath() + "/"+"image.jpg"); imageArray = new byte[(int)tempFile.length()]; try{ InputStream is = new FileInputStream(tempFilE); BufferedInputStream bis = new BufferedInputStream(is); DataInputStream dis = new DataInputStream(bis); int i = 0; while (dis.available() > 0) { imageArraY[i] = dis.readByte(); i++; } dis.close(); } catch (Exception E) { e.printStackTrace(); } BitmapFactory.options bfo = new BitmapFactory.options(); bfo.inSampleSize = 1; bm = BitmapFactory.decodeByteArray(imageArray,imageArray.length,bfo); bgr = Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),bm.getCon@L_801_3@()); bgr = bm.copy(bm.getCon@L_801_3@(),truE); bgr2 = Bitmap.createBitmap(bm.getWidth(),bm.getCon@L_801_3@()); f = new Filters(); //bgr2 = f.barrel(bgr,0.00022F); pTouch = new Paint(Paint.ANTI_ALIAS_FLAG); pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); pTouch.setColor(Color.TRANSPARENT); pTouch.setStyle(Paint.Style.stroke); }// end of touchView constructor public void findCirclePixels(){ /* for (int i=centreX-50; i < centreX+50; ++i) { for (int y=centreY-50; y <centreY+50 ; ++y) { if( Math.sqrt( Math.pow(i - centreX,2) + ( Math.pow(y - centreY,2) ) ) <= radius ){ bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100)); } } }*/ float prog = (float)Progress/2000000; bgr2 = f.barrel(bgr,prog); }// end of changePixel() @Override public Boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: { centreX = (int) ev.getX(); centreY = (int) ev.getY(); findCirclePixels(); invalidate(); break; } case MotionEvent.ACTION_MOVE: { centreX = (int) ev.getX(); centreY = (int) ev.getY(); findCirclePixels(); invalidate(); break; } case MotionEvent.ACTION_UP: break; } return true; }//end of onTouchEvent public void initSlider(final HorizontalSlider slider) { Log.e(tag,"******setTing up slider*********** "); slider.setOnProgresschangelistener(changelistener); } private OnProgresschangelistener changelistener = new OnProgresschangelistener() { @Override public void onProgressChanged(View v,int progress) { // TODO Auto-generated method stub setProgress(progress); Log.e(tag,"***********progress = "+Progress); } }; @Override public void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawBitmap(bgr2,null); canvas.drawCircle(centreX,centreY,radius,pTouch); }//end of onDraw protected void setProgress(int progress2) { this.Progress = progress2; findCirclePixels(); invalidate(); } }
.
import android.graphics.bitmap; import android.util.Log; class Filters{ float xscale; float yscale; float xshift; float yshift; int [] s; private String TAG = "Filters"; public Filters(){ Log.e(tag,"***********inside constructor"); } public Bitmap barrel (Bitmap input,float k){ Log.e(tag,"***********inside barrel method "); float centerX=input.getWidth()/2; //center of distortion float centerY=input.getHeight()/2; int width = input.getWidth(); //image bounds int height = input.getHeight(); Bitmap dst = Bitmap.createBitmap(width,height,input.getCon@L_801_3@() ); //output pic Log.e(tag,"***********dst bitmap created "); xshift = calc_shift(0,centerX-1,centerX,k); float newcenterX = width-centerX; float xshift_2 = calc_shift(0,newcenterX-1,newcenterX,k); yshift = calc_shift(0,centerY-1,centerY,k); float newcenterY = height-centerY; float yshift_2 = calc_shift(0,newcenterY-1,newcenterY,k); xscale = (width-xshift-xshift_2)/width; yscale = (height-yshift-yshift_2)/height; Log.e(tag,"***********about to loop through bm"); /*for(int j=0;j<dst.getHeight();j++){ for(int i=0;i<dst.getWidth();i++){ float x = geTradialX((float)i,(float)j,k); float y = geTradialY((float)i,k); sampleImage(input,x,y); int color = ((s[1]&0x0ff)<<16)|((s[2]&0x0ff)<<8)|(s[3]&0x0ff); // System.out.print(i+" "+j+" \\"); dst.setPixel(i,j,color); } }*/ int origPixel; for(int j=0;j<dst.getHeight();j++){ for(int i=0;i<dst.getWidth();i++){ origPixel= input.getPixel(i,j); float x = geTradialX((float)i,y); int color = ((s[1]&0x0ff)<<16)|((s[2]&0x0ff)<<8)|(s[3]&0x0ff); // System.out.print(i+" "+j+" \\"); if( Math.sqrt( Math.pow(i - centerX,2) + ( Math.pow(j - centerY,2) ) ) <= 85 ){ dst.setPixel(i,color); }else{ dst.setPixel(i,origPixel); } } } return dst; } void sampleImage(Bitmap arr,float idx0,float idx1) { s = new int [4]; if(idx0<0 || idx1<0 || idx0>(arr.getHeight()-1) || idx1>(arr.getWidth()-1)){ s[0]=0; s[1]=0; s[2]=0; s[3]=0; return; } float idx0_fl=(float) Math.floor(idx0); float idx0_cl=(float) Math.ceil(idx0); float idx1_fl=(float) Math.floor(idx1); float idx1_cl=(float) Math.ceil(idx1); int [] s1 = getARGB(arr,(int)idx0_fl,(int)idx1_fl); int [] s2 = getARGB(arr,(int)idx1_cl); int [] s3 = getARGB(arr,(int)idx0_cl,(int)idx1_cl); int [] s4 = getARGB(arr,(int)idx1_fl); float x = idx0 - idx0_fl; float y = idx1 - idx1_fl; s[0]= (int) (s1[0]*(1-X)*(1-y) + s2[0]*(1-X)*y + s3[0]*x*y + s4[0]*x*(1-y)); s[1]= (int) (s1[1]*(1-X)*(1-y) + s2[1]*(1-X)*y + s3[1]*x*y + s4[1]*x*(1-y)); s[2]= (int) (s1[2]*(1-X)*(1-y) + s2[2]*(1-X)*y + s3[2]*x*y + s4[2]*x*(1-y)); s[3]= (int) (s1[3]*(1-X)*(1-y) + s2[3]*(1-X)*y + s3[3]*x*y + s4[3]*x*(1-y)); } int [] getARGB(Bitmap buf,int x,int y){ int rgb = buf.getPixel(y,X); // Returns by default ARGB. int [] scalar = new int[4]; scalar[0] = (rgb >>> 24) & 0xFF; scalar[1] = (rgb >>> 16) & 0xFF; scalar[2] = (rgb >>> 8) & 0xFF; scalar[3] = (rgb >>> 0) & 0xFF; return scalar; } float geTradialX(float x,float y,float cx,float cy,float k){ x = (x*xscale+xshift); y = (y*yscale+yshift); float res = x+((x-cX)*k*((x-cX)*(x-cX)+(y-cy)*(y-cy))); return res; } float geTradialY(float x,float k){ x = (x*xscale+xshift); y = (y*yscale+yshift); float res = y+((y-cy)*k*((x-cX)*(x-cX)+(y-cy)*(y-cy))); return res; } float thresh = 1; float calc_shift(float x1,float x2,float k){ float x3 = (float)(x1+(x2-x1)*0.5); float res1 = x1+((x1-cX)*k*((x1-cX)*(x1-cX))); float res3 = x3+((x3-cX)*k*((x3-cX)*(x3-cX))); if(res1>-thresh && res1 < thresh) return x1; if(res3<0){ return calc_shift(x3,x2,cx,k); } else{ return calc_shift(x1,x3,k); } } }
以上是大佬教程为你收集整理的android – 圆形鱼眼扭曲扭曲270度,逆时针扭转90度?全部内容,希望文章能够帮你解决android – 圆形鱼眼扭曲扭曲270度,逆时针扭转90度?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。