Android图片图形处理.docx
《Android图片图形处理.docx》由会员分享,可在线阅读,更多相关《Android图片图形处理.docx(10页珍藏版)》请在冰豆网上搜索。
Android图片图形处理
生成水印的过程。
其实分为三个环节:
第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。
1./**
2. *createthebitmapfromabytearray
3. *
4. *@paramsrcthebitmapobjectyouwantproecss
5. *@paramwatermarkthewatermarkabovethesrc
6. *@returnreturnabitmapobject,ifparamter'slengthis0,returnnull
7. */
8. privateBitmapcreateBitmap(Bitmapsrc,Bitmapwatermark)
9. {
10. Stringtag="createBitmap";
11. Log.d(tag,"createanewbitmap");
12. if(src==null)
13. {
14. returnnull;
15. }
16.
17. intw=src.getWidth();
18. inth=src.getHeight();
19. intww=watermark.getWidth();
20. intwh=watermark.getHeight();
21. //createthenewblankbitmap
22. Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
23. Canvascv=newCanvas(newb);
24. //drawsrcinto
25. cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
26. //drawwatermarkinto
27. cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//在src的右下角画入水印
28. //saveallclip
29. cv.save(Canvas.ALL_SAVE_FLAG);//保存
30. //store
31. cv.restore();//存储
32. returnnewb;
33. }
找上面里说应该是在第一张图片上有了水印,那我怎么去得到这张有水印的图片呢
------------------------------------------------------------------------------------------------------------------
问题补充:
joe_zhpf写道
返回的这个不就是最后处理后得到的带有水印的图片?
图片写文件Bitmap有个compess方法.
程序逻辑实际是:
先建立一个空可读可写的bitmap,desBtimap
载入背景图片(原始图片)(这个是只是可读的)把背景图片的像素信息画到先前建立的可读写的bitmap,即desBtimap中
接着载入水印图片,根据需要在指定的位置把水印图片的像素信息,画到desBitmap中.
保存后,返回desBitmap即是得到的带有水印的图片.
嗯,你说的这个我也知道,我刚接触,不太懂,我的意思是如何处理返回的这个desBitmap呢,代码中只把它return之后就没了,我想知道return之后怎么做,就是说我打开文件夹就能开间带有水印的图片了,烦你指导下啊,谢谢
返回的这个不就是最后处理后得到的带有水印的图片?
图片写文件Bitmap有个compess方法.
程序逻辑实际是:
先建立一个空可读可写的bitmap,desBtimap
载入背景图片(原始图片)(这个是只是可读的)把背景图片的像素信息画到先前建立的可读写的bitmap,即desBtimap中
接着载入水印图片,根据需要在指定的位置把水印图片的像素信息,画到desBitmap中.
保存后,返回desBitmap即是得到的带有水印的图片.
joe_zhpf(初级程序员)2010-08-15
我理解你是想把bitmap保存文件?
如果你是想存文件,前面我也提到了.bitmap类有个写文件的方法compress,这个方法使用可以看api.
举个例子:
首先获得带有水印的图片,desBitmap.
Java代码
1. File bitmapFile = new File(路径,文件名);
2. FileOutputStream bitmapWtriter = new FileOutputStream(bitmapFile);
3. if(desBpress(Bitmap.CompressForma.png, 100, bitmapWtiter)) {
4. Log.d("TAG","保存文件成功!
");
5.}
6.
7.
FilebitmapFile=newFile(路径,文件名);
FileOutputStreambitmapWtriter=newFileOutputStream(bitmapFile);
if(desBpress(Bitmap.CompressForma.png,100,bitmapWtiter)){
Log.d("TAG","保存文件成功!
");
}
你就可以到你指定的目录下看你保存的图片了.
Android之图片处理(图片合成、图片圆角、图片翻转、图片缩放)
2010-12-1312:
53
图片合成
/**
*图片合成
*@parambitmap
*@return
*/
privateBitmapcreateBitmap(Bitmapsrc,Bitmapwatermark){
if(src==null){
returnnull;
}
intw=src.getWidth();
inth=src.getHeight();
intww=watermark.getWidth();
intwh=watermark.getHeight();
//createthenewblankbitmap
Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
Canvascv=newCanvas(newb);
//drawsrcinto
cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
//drawwatermarkinto
cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//在src的右下角画入水印
//saveallclip
cv.save(Canvas.ALL_SAVE_FLAG);//保存
//store
cv.restore();//存储
returnnewb;
}
图片圆角
/**
*图片圆角
*@parambitmap
*@return
*/
publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap){
Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(),Config.ARGB_8888);
Canvascanvas=newCanvas(output);
finalintcolor=0xff424242;
finalPaintpaint=newPaint();
finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
finalRectFrectF=newRectF(rect);
finalfloatroundPx=12;
paint.setAntiAlias(true);
canvas.drawARGB(0,0,0,0);
paint.setColor(color);
canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,rect,rect,paint);
returnoutput;
}
图片缩放、翻转和旋转
/**
*缩放、翻转和旋转图片
*@parambmpOrg
*@paramrotate
*@return
*/
privateandroid.graphics.BitmapgerZoomRotateBitmap(
android.graphics.BitmapbmpOrg,introtate){
//获取图片的原始的大小
intwidth=bmpOrg.getWidth();
intheight=bmpOrg.getHeight();
intnewWidth=300;
intnewheight=300;
//定义缩放的高和宽的比例
floatsw=((float)newWidth)/width;
floatsh=((float)newheight)/height;
//创建操作图片的用的Matrix对象
android.graphics.Matrixmatrix=newandroid.graphics.Matrix();
//缩放翻转图片的动作
//swsh的绝对值为绽放宽高的比例,sw为负数表示X方向翻转,sh为负数表示Y方向翻转
matrix.postScale(sw,sh);
//旋转30*
matrix.postRotate(rotate);
//创建一个新的图片
android.graphics.BitmapresizeBitmap=android.graphics.Bitmap
.createBitmap(bmpOrg,0,0,width,height,matrix,true);
returnresizeBitmap;
}
android遮罩层效果
看到一本电子杂志上有遮罩层的效果,感觉很漂亮,以为很麻烦,搜索了很多关于android遮罩层的,也没有得出一点思路,原来就是一个透明的效果,然后上面弹出的控件是透明或者半透明之类的,可以选择颜色,还是#ARBG,其中A就是传说中的透明色的值(可以根据需要设置透明的效果),废话不多说了,发一个简单的Demo吧,是我山寨的那本杂志的效果:
(由于杂志内容主要是图片,弹出层才是给出的文字信息,所以我猜测是用Gallery显示的杂志内容)
xml布局文件:
xmlversion="1.0"encoding="utf-8"?
>
android="
android:
id="@+id/layout"
android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
>
android:
id="@+id/showGallery"
android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
android:
spacing="0dip"
/>
android:
orientation="horizontal"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
layout_gravity="bottom"
android:
background="#86222222"
>
android:
id="@+id/titleTextView"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_toRightOf="@id/secondKillButton"
android:
textColor="#ff0000"
/>
主要的代码也很简单,还有一个简单的Adapter,有不理解的朋友可以看我之前的blog
packageoneRain.UpMagazine;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Color;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup;
importandroid.view.Window;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemSelectedListener;
importandroid.widget.BaseAdapter;
importandroid.widget.Button;
importandroid.widget.FrameLayout;
importandroid.widget.Gallery;
importandroid.widget.ImageView;
importandroid.widget.TextView;
publicclassShowActivityextendsActivity
{
privateinti=1;
privateintpos=0;
privateListcontents=null;
privatestaticfinalStringDIR="/mnt/sdcard/UpMagazine/2010/content/";
//设置是否展开
privatebooleanisFolded=true;
//设置控件
privateFrameLayoutlayout=null;
privateGalleryshowGallery=null;
privateButtonunfoldButton=null;
privateTextViewtextView=null;
privateTextViewtitleTextView=null;
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.show);
initView();
}
@Override
protectedvoidonResume()
{
//TODOAuto-generatedmethodstu
super.onResume();
isFolded=true;
}
//初始化
privatevoidinitView()
{
contents=newArrayList();
Filedir=newFile(DIR);
File[]files=dir.listFiles();
for(inti=0;i {
contents.add(DIR+files[i].getName());
}
layout=(FrameLayout)findViewById(R.id.layout);
unfoldButton=(Button)findViewById(R.id.unfoldButton);
unfoldButton.setOnClickListener(newUnfoldClickListener());
showGallery=(Gallery)findViewById(R.id.showGallery);
showGallery.setOnItemSelectedListener(newGalleryOnItemSelectedListener());
showGallery.setAdapter(newShowAdapter());