华硕144hz华硕vg278q显示器评测 vg278q 怎么关掉moba模式

1875人阅读
android(152)
视频播放器制作(26)
在智能电视TV开发---录像&&&&的基础上实现拍照功能同时修改了智能电视TV开发---录像&&里面的预览竖屏的时候,预览图像旋转了90°的问题。
一、录像实现
其实录像部分我们既可以使用Android提供的MediaRecoder也可以自己来实现,实现方式与下面的拍照功能类似,要实现PreviewCallback这个接口,具体的代码如下:
package com.jwzhangjie.smarttv_client.media.V
import java.io.BufferedOutputS
import java.io.F
import java.io.FileOutputS
import com.jwzhangjie.smarttv_client.utils.AppL
import com.jwzhangjie.smarttv_client.utils.DateU
import android.content.C
import android.content.res.C
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.ImageF
import android.hardware.C
import android.hardware.Camera.PictureC
import android.hardware.Camera.PreviewC
import android.os.E
import android.util.AttributeS
import android.view.SurfaceH
import android.view.SurfaceHolder.C
import android.view.SurfaceV
public class SmartVideoSurfaceView extends SurfaceView implements Callback{
private SurfaceHolder mH
private Camera mC
private boolean previewRunning =
private int type = 0;
private String sdD
public SmartVideoSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
initConfig();
private void initConfig(){
mHolder = this.getHolder();
mHolder.addCallback(this);
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
sdDir = Environment.getExternalStorageDirectory().toString();
sdDir = &/mnt/sdcard&;
public Camera getVideoCamera(){
public SurfaceHolder getMyHolder(){
* 拍照功能
public void getPhoto(){
if (mCamera != null) {
mCamera.setOneShotPreviewCallback(pCallback);
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
Camera.Parameters params = mCamera.getParameters();
if (getContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
params.set(&orientation&, &portrait&);
params.set(&rotation&, 90);
//不然预览会颠倒90°
mCamera.setDisplayOrientation(90);
params.set(&orientation&, &landscape&);
mCamera.setDisplayOrientation(0);
mCamera.setParameters(params);
} catch (Exception e) {
e.printStackTrace();
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mCamera != null) {
if (previewRunning) {
mCamera.stopPreview();
Camera.Parameters params = mCamera.getParameters();
params.setPreviewSize(width, height);
params.setPreviewFormat(ImageFormat.JPEG);
mCamera.setParameters(params);
} catch (Exception e) {
e.printStackTrace();
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
mCamera.autoFocus(null);//自动对焦
previewRunning =
} catch (Exception e) {
e.printStackTrace();
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null) {
mCamera.stopPreview();
previewRunning =
mCamera.setPreviewCallback(null);
mCamera.release();
PreviewCallback pCallback = new PreviewCallback(){
public void onPreviewFrame(byte[] data, Camera camera) {
switch (type) {
case 0://拍照
camera.takePicture(null, null, jpeg);
PictureCallback jpeg = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
StringBuilder builder = new StringBuilder(sdDir);
builder.append(&/&);
builder.append(DateUtils.getCurrentTime());
builder.append(&.jpeg&);
AppLogger.e(builder.toString());
//自定义文件保留路径,以拍摄时间命名
File file = new File(builder.toString());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
pressFormat.JPEG, 100, bos);//将图片压缩的流里面
bos.flush();
bos.close();
bitmap.recycle();
builder.setLength(0);
} catch (Exception e) {
e.printStackTrace();
这里我实现的是拍照功能,所以我实现的预览回调接口是setOneShotPreviewCallback。
效果图如下:
预览界面截图:
实际的拍照效果:
二、添加水印
其实添加水印也就是获取要Bitmap的Canvas,然后再canvas绘制内容,最后save保存,把绘制的图像保存在要添加水印的Bitmap上面,代码如下:
这里只给出修改部分的代码:
PictureCallback jpeg = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
StringBuilder builder = new StringBuilder(sdDir);
builder.append(&/&);
builder.append(DateUtils.getCurrentTime());
builder.append(&.jpg&);
bitmap = createWaterMark(bitmap, null, &jwzhangjie制作&);
//自定义文件保留路径,以拍摄时间命名
File file = new File(builder.toString());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
pressFormat.JPEG, 100, bos);//将图片压缩的流里面
bos.flush();
bos.close();
bitmap.recycle();
builder.setLength(0);
} catch (Exception e) {
e.printStackTrace();
* 添加水印效果
* @param src
* @param watermark
* @param title
public Bitmap createWaterMark(Bitmap src, Bitmap watermark, String title){
if (src != null) {
int w = src.getWidth();
int h = src.getHeight();
//创建一个空白的画布
Bitmap tempBitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(tempBitmap);
//在 0,0坐标开始画入src
canvas.drawBitmap(src, 0, 0, null);
Paint paint = new Paint();
//绘制水印
if (watermark != null) {
int ww = watermark.getWidth();
int hh = watermark.getHeight();
paint.setAlpha(50);
// 在src的右下角画入水印
canvas.drawBitmap(watermark, w - ww + 5, h - hh + 5, paint);
//绘制文字
if (title != null) {
String familyName = &宋体&;
Typeface font = Typeface.create(familyName, Typeface.BOLD);
TextPaint textPaint = new TextPaint();
textPaint.setColor(Color.RED);
textPaint.setTypeface(font);
textPaint.setTextSize(22);
//这里是自动换行
StaticLayout layout = new StaticLayout(title, textPaint, w, Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true);
layout.draw(canvas);
//文字加在中央
canvas.drawText(title, w/2, 40, textPaint);
//保存画布
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return tempB
效果图如下:
其中,上面的红色部分是我添加的水印
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1604588次
积分:15237
积分:15237
排名:第585名
原创:199篇
转载:41篇
评论:756条
文章:16篇
阅读:92177
文章:19篇
阅读:155074
文章:10篇
阅读:202190
(1)(1)(2)(2)(4)(1)(4)(2)(5)(4)(2)(1)(2)(1)(9)(3)(3)(10)(4)(9)(7)(6)(9)(12)(3)(21)(14)(21)(14)(25)(7)(19)(18)温馨提醒:鼠标移动到图标上可预览截图&&&&
美图软件排行榜,手机美图软件有哪些,美图软件大全,美图软件哪个好,美图软件免费下载
等级:2203次下载40.8MB简体推荐理由:玩美相机是妳唯一需要的自拍美颜相机,完美自我轻松呈现。
等级:2717次下载41MB简体推荐理由:用 Photoshop MIX 去除背景使用起来相当方便,不仅指工具操作简单,其去背景算法的成功率也非常高,简单的划动就能准确去除大面积的背景
等级:3808次下载16.8MB简体推荐理由:一款超强自拍神器,让你一秒拥有自然美妆。强大的智能美妆技术,能让你的妆容和五官完美融合,效果超自然哦!
等级:1040次下载6.75MB简体推荐理由:主要功能: - 改进你的照片、裁切照片、改善精细的色调和色彩的变化来获取最佳的照片效果 - 拥有高级的照片编辑工具,使用图层来编辑照片,更加的
等级:979次下载33.92MB简体推荐理由:鲜为人知的精华,拍照爱死的软件!不信试试。震撼特效,全球独创。漫画、彩铅、蜡笔…智能美颜,一键自然美。嫩肤、瘦脸、祛斑…
等级:582次下载42.21MB简体推荐理由:Decopic是一款可爱的精简版照片编辑应用软件。
等级:10629次下载19.3MB简体推荐理由:独创的画中画特效、3D特效,让你的照片脱颖而出、与众不同,看起来超神奇!
等级:2785次下载5.47MB简体推荐理由:Instagram是国外一个功能非常强大的相机软件,他可以让你充分的发挥你的相片滤镜效果,你可以分享到facebook以及你能想到的社交圈。
等级:2408次下载37.2MB简体推荐理由:全方位的图片美化,一秒钟让照片告别平庸。
等级:1338次下载23.5MB简体推荐理由:滤镜,光影,裁剪,旋转,场景,相框,荧光笔,水印,虚化等基础功能应有尽有
等级:936次下载53.2MB简体推荐理由:国内第一款自拍美颜相机,2亿美女在使用。POCO美人相机,更懂美,更懂你。
等级:349次下载23.5MB简体推荐理由:只要拥有一个美图贴贴就够啦!既能 DIY超萌“大头贴”,又能贴出日系风的“可爱拼图” ! 绝对值得拥有的卖萌利器,让你的照片变得更加可爱、生
美图软件有哪些萌萌的哪个好用?第九软件网提供2015年手机美图软件排行榜,每天更新大量安卓美图软件和教程,是最权威的美图软件官方授权下载站,想要关注美图软件大全排行榜下载和美图软件有哪些哪个好就到第九软件网,提供各类主流热门手机美图软件排行榜和评测对比,欢迎分享。
等级:1154次下载13.5MB简体推荐理由:每日更新: 每日定期更新大约10篇作品供使用者免费观看。
等级:325次下载2.39MB简体推荐理由:萌宠,风景,生活纪实,lomo,四大风格超大图库,让你看个够,可以下载到手机,可以设置为壁纸,每张图都代表了一个图集,并且每套图都有介绍和
等级:563次下载30.8MB简体推荐理由:独家大头、海量贴纸,轻松一步让你萌值爆表! 专业滤镜、时尚标签,一键生成你的时尚大片!
等级:213次下载1.79MB简体推荐理由:摄影美图,隶属于中国影像第一门户——蜂鸟网,以论坛积累的海量图片作为根基,为您汇聚、精选最优秀的摄影师和摄影爱好者们的作品,每一张美图
等级:397次下载23.64MB简体推荐理由:高效精准的智能算法为你量身定制最适合你的精彩视频,最具特色的分类排序满足你的不同需要;
等级:1582次下载16.1MB简体推荐理由:个人形象与彩色漫画的完美融合,个性化时代,自定义精彩!
等级:908次下载20.29MB简体推荐理由:【美图秀秀出品】最潮海报制作神器!海报工厂,照片瞬间高大上!数十名设计师呕心之作,款款都带范儿!引领照片新玩法,重新定义拼图方式!
等级:715次下载31.37MB简体推荐理由:Android平台上一款功能非常全面的图片处理软件,能添加小标签、彩色文字、裁剪、调整颜色和艺术效果等
等级:2418次下载38.2MB简体推荐理由:将真人拍成幽默漫画的手机应用
等级:653次下载9.05MB简体推荐理由:专业拍照ProCapture是一款全面的拍照软件,支持多个先进的拍摄模式:定时器、连拍、降低噪点、广角镜头和全景照片等等。
等级:292次下载9.6MB简体推荐理由:相格软件是专门为了制作拼图照片开发的手机拼图软件,设计独特,主界面上有两种导入方式,选择相册相片和拍取相片,最大能支持12张照片的拼贴。
等级:1158次下载12.89MB简体推荐理由:百度魔拍是一款轻快便捷的拍照工具,致力于给您带来更快捷,更满意的拍照体验,帮您记录生活点滴。
美图软件教程
专题推荐 prev next5147人阅读
1.调用拍照(获取原始图片)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String ppName = &example_2012.jpg&;
File f1 = new File(&/sdcard/mfile/image/& + ppName);
Uri u1 = Uri.fromFile(f1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, u1);
startActivityForResult(intent, CAMERA_ACTIVITY);
2.获取本地图片进行处理并回写
private void dealPhotoFile(final String file)
PhotoTask task = new PhotoTask(file);
task.start();
photoTasks.add(task);
private class PhotoTask extends Thread
private boolean isF
public PhotoTask(String file)
this.file =
public void run()
BufferedOutputStream bos =
Bitmap icon =
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds =
BitmapFactory.decodeFile(file, options); //此时返回bm为空
float percent =
options.outHeight & options.outWidth ? options.outHeight / 960f : options.outWidth / 960f;
if (percent & 1)
percent = 1;
int width = (int)(options.outWidth / percent);
int height = (int)(options.outHeight / percent);
icon = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
//初始化画布 绘制的图像到icon上
Canvas canvas = new Canvas(icon);
//建立画笔
Paint photoPaint = new Paint();
//获取跟清晰的图像采样
photoPaint.setDither(true);
//过滤一些
photoPaint.setFilterBitmap(true);
options.inJustDecodeBounds =
Bitmap prePhoto = BitmapFactory.decodeFile(file);
if (percent & 1)
prePhoto = Bitmap.createScaledBitmap(prePhoto, width, height, true);
canvas.drawBitmap(prePhoto, 0, 0, photoPaint);
if (prePhoto != null && !prePhoto.isRecycled())
prePhoto.recycle();
prePhoto =
System.gc();
//设置画笔
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
//字体大小
textPaint.setTextSize(20.0f);
//采用默认的宽度
textPaint.setTypeface(Typeface.DEFAULT);
//采用的颜色
textPaint.setColor(Color.YELLOW);
//阴影设置
textPaint.setShadowLayer(3f, 1, 1, Color.DKGRAY);
// 时间水印
String mark = getCurrTime(&yyyy-MM-dd HH:mm:ss&);
float textWidth = textPaint.measureText(mark);
canvas.drawText(mark, width - textWidth - 10, height - 26, textPaint);
bos = new BufferedOutputStream(new FileOutputStream(file));
int quaility = (int)(100 / percent & 80 ? 80 : 100 / percent);
press(CompressFormat.JPEG, quaility, bos);
bos.flush();
catch (Exception e)
e.printStackTrace();
isFinished =
if (bos != null)
bos.close();
catch (IOException e)
e.printStackTrace();
if (icon != null && !icon.isRecycled())
icon.recycle();
System.gc();
private static String getCurrTime(String pattern)
if (pattern == null)
pattern = &yyyyMMddHHmmss&;
return (new SimpleDateFormat(pattern)).format(new Date());
以下转自eoe关于图片内存溢出的问题处理分享(没有实际验证)
腾讯高级开发工程师-郭大扬【Android图像处理】
实际问题解决分案分享
最有效方法
options.inPurgeable =
options.inInputShareable =
接下来讲一个比较细节的问题,我们做图像处理,老是会遇到out of memory,实在很抓狂,有时候搞半天都不知道为什么。搜索了上百个帖子都说把它压成一半,实际上我就不想压成一半,我就要这么大。我这里摸索到一个比较好的解决方法。我自己觉得百试不爽的加上这两句属性,一个是代表可以擦除的,一个代表可以共享,我现在一般不会遇到内存溢出的情况。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:453637次
积分:5146
积分:5146
排名:第4393名
原创:56篇
转载:149篇
评论:68条
(1)(6)(2)(1)(3)(6)(2)(7)(1)(5)(3)(9)(25)(4)(4)(11)(5)(1)(9)(6)(2)(2)(6)(1)(4)(8)(2)(6)(2)(1)(5)(4)(4)(1)(1)(1)(4)(1)(9)(2)(3)(3)(4)(1)(1)(2)(1)(1)(4)(1)(1)(2)(2)(1)(3)

我要回帖

更多关于 华硕144hz显示器 的文章

 

随机推荐