gpt4 book ai didi

Android位图压缩不好

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:00 25 4
gpt4 key购买 nike

我得到了以下输出流代码:

        String output_file = APP_FILE_PATH + "/AudienceSignatures/" + CaptureSignature.this.sessionNumber + ".png";

final FileOutputStream out = new FileOutputStream(new File( output_file ));
nBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();

但看起来生成的图像不是我所期望的。如您所见,它有一些线条,我想去掉那些水平的白线。这可能是什么原因造成的?

enter image description here

非常感谢您提供的任何帮助! :)

更新:这里是 CaptureSignature.java 类,“我认为”我遇到了问题:

package com.first.MyApp.drawings;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

import com.first.Engagia.Camera;
import com.first.Engagia.R;
import com.first.Engagia.R.id;
import com.first.Engagia.R.layout;
import com.first.Engagia.drawings.brush.Brush;
import com.first.Engagia.drawings.brush.CircleBrush;
import com.first.Engagia.drawings.brush.PenBrush;

import java.io.File;
import java.io.FileOutputStream;

public class CaptureSignature extends Activity implements View.OnTouchListener{
private DrawingSurface drawingSurface;
private DrawingPath currentDrawingPath;
private Paint currentPaint;

private Brush currentBrush;

private File APP_FILE_PATH = new File(Environment.getExternalStorageDirectory() + "/Engagia/AudienceSignatures");

//..some other instance variables here

public static final String LOG_TAG = "-------->>>> CAPTURE SIGNATURE <<<<-------";
private ProgressDialog mProgressDialog;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawing_activity);

Log.d(LOG_TAG, "Inside capture signature");

PopIt("Camera", "Please sign on the whitespace provided.");

Bundle extras = getIntent().getExtras();

if(extras != null){
this.userId = extras.getString("userId");
this.appview_username = extras.getString("username");
this.appview_password = extras.getString("password");

this.userfirstname = extras.getString("userfirstname");
this.userlastname = extras.getString("userlastname");
this.companyname = extras.getString("companyname");

this.sessionNumber = extras.getString("sessionNumber");
this.sessionFirstname = extras.getString("sessionFirstname");
this.sessionLastname = extras.getString("sessionLastname");

this.AudienceFirstnameLastname = extras.getString("AudienceFirstnameLastname");

}

setCurrentPaint();
currentBrush = new PenBrush();

drawingSurface = (DrawingSurface) findViewById(R.id.drawingSurface);
drawingSurface.setOnTouchListener(this);
drawingSurface.previewPath = new DrawingPath();
drawingSurface.previewPath.path = new Path();
drawingSurface.previewPath.paint = getPreviewPaint();


}

public void PopIt(String title, String message){
android.content.DialogInterface.OnClickListener arg1 = null;
new AlertDialog.Builder(this)
.setTitle( title )
.setMessage( message )
.setPositiveButton("OK", arg1).show();
}


private void setCurrentPaint(){
currentPaint = new Paint();
currentPaint.setDither(true);
currentPaint.setColor(0xff000000);
currentPaint.setStyle(Paint.Style.STROKE);
currentPaint.setStrokeJoin(Paint.Join.ROUND);
currentPaint.setStrokeCap(Paint.Cap.ROUND);
currentPaint.setStrokeWidth(8);

}

private Paint getPreviewPaint(){
final Paint previewPaint = new Paint();
previewPaint.setColor(0xff000000);
previewPaint.setStyle(Paint.Style.STROKE);
previewPaint.setStrokeJoin(Paint.Join.ROUND);
previewPaint.setStrokeCap(Paint.Cap.ROUND);
previewPaint.setStrokeWidth(8);
return previewPaint;
}




public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
drawingSurface.isDrawing = true;

currentDrawingPath = new DrawingPath();
currentDrawingPath.paint = currentPaint;
currentDrawingPath.path = new Path();
currentBrush.mouseDown(currentDrawingPath.path, motionEvent.getX(), motionEvent.getY());
currentBrush.mouseDown(drawingSurface.previewPath.path, motionEvent.getX(), motionEvent.getY());


}else if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
drawingSurface.isDrawing = true;
currentBrush.mouseMove( currentDrawingPath.path, motionEvent.getX(), motionEvent.getY() );
currentBrush.mouseMove(drawingSurface.previewPath.path, motionEvent.getX(), motionEvent.getY());


}else if(motionEvent.getAction() == MotionEvent.ACTION_UP){


currentBrush.mouseUp(drawingSurface.previewPath.path, motionEvent.getX(), motionEvent.getY());
drawingSurface.previewPath.path = new Path();
drawingSurface.addDrawingPath(currentDrawingPath);

currentBrush.mouseUp( currentDrawingPath.path, motionEvent.getX(), motionEvent.getY() );

}

return true;
}


public void onClick(View view){
switch (view.getId()){
case R.id.saveBtn:
Log.d(LOG_TAG, "Save Button clicked!");


showDialog(0);
CaptureSignature.this.mProgressDialog.setMessage("Saving your signature...");

final Activity currentActivity = this;
Handler saveHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
final AlertDialog alertDialog = new AlertDialog.Builder(currentActivity).create();
alertDialog.setTitle("Done");
alertDialog.setMessage("Your signature has been captured.");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

Log.d(LOG_TAG, "Going to camera activity");

//...intent to next activity after signature was taken

return;
}
});

if( CaptureSignature.this.mProgressDialog.isShowing() ){
dismissDialog(0);
}

alertDialog.show();
}
} ;
new ExportBitmapToFile(this,saveHandler, drawingSurface.getBitmap()).execute();
break;
case R.id.resetBtn:
Log.d(LOG_TAG, "Reset Button clicked!");

//..reset intent here

break;

}
}


private class ExportBitmapToFile extends AsyncTask<Intent,Void,Boolean> {
private Context mContext;
private Handler mHandler;
private Bitmap nBitmap;

public ExportBitmapToFile(Context context,Handler handler,Bitmap bitmap) {
mContext = context;
nBitmap = bitmap;
mHandler = handler;
}

@Override
protected Boolean doInBackground(Intent... arg0) {
try {
if (!APP_FILE_PATH.exists()) {
APP_FILE_PATH.mkdirs();
}
Log.d(LOG_TAG, "Sig.output stream area.");

final FileOutputStream out = new FileOutputStream(new File(APP_FILE_PATH + "/" + CaptureSignature.this.sessionNumber + ".png"));
nBitmap.setDensity(50);
nBitmap.compress(Bitmap.CompressFormat.PNG, 50, out);

out.flush();
out.close();

Log.d(LOG_TAG, "Done bitmap compress.");
return true;
}catch (Exception e) {
e.printStackTrace();
}

return false;
}


@Override
protected void onPostExecute(Boolean bool) {
super.onPostExecute(bool);
if ( bool ){
mHandler.sendEmptyMessage(1);
}
}
}

@Override
public void onBackPressed() {

}

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
}

基本上,我正在 try catch 用户的签名并将其保存到我的 android 设备 sdcard 中的 png 文件中。

最佳答案

我从未见过我们的 PNG 压缩有这样的问题。不就是原来的位图吗?

关于Android位图压缩不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com