Ich habe hier ein ziemliches Problem.Ich bekomme nach dem Lesen und Schreiben des Bildes einen anderen Pixelwert
Wenn ich Bild lesen und dann speichern, bekomme ich das gleiche Bild. Aber wenn ich den Pixelwert öffne, ist der Wert jedes Pixels etwas anders (größer oder kleiner um 10 Einheiten).
Warum hat sich das Pixel geändert? Ich lese nur das Bild, dann speichere es, ich mache keine Änderungen am Pixel. Ich erstelle es mit dem Format RGB und speichern Sie als PNG mit ByteArrayOutputStream Methode.
private void onCaptureImageResult(Intent data) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
File destination = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
FileOutputStream fo;
try {
destination.createNewFile();
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ivImage.setImageBitmap(thumbnail);
}
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
} catch (IOException e) {
e.printStackTrace();
}
}
bmp = bm;
}
public void save(View view){
operation= Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),bmp.getConfig());
int size = bmp.getRowBytes() * bmp.getHeight();
bytearrayoutputstream = new ByteArrayOutputStream();
int[] gambarR = new int[size];
int[] gambarG = new int[size];
int[] gambarB = new int[size];
int[] gambarA = new int[size];
int k = 0;
for(int i=0; i<bmp.getWidth(); i++){
for(int j=0; j<bmp.getHeight(); j++){
int p = bmp.getPixel(i, j);
gambarR[k] = Color.red(p);
gambarG[k] = Color.green(p);
gambarB[k] = Color.blue(p);
gambarA[k] = Color.alpha(p);
k++;
}
}
int l = 0;
for(int i = 0; i<bmp.getWidth(); i++){
for(int j = 0; j<bmp.getHeight();j++){
operation.setPixel(i, j, Color.rgb(gambarR[l], gambarG[l], gambarB[l]));
l++;
}
}
String fileName = "_hasil.bmp";
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
File gambar = new File(baseDir + File.separator + ts + fileName);
try
{
gambar.createNewFile();
fileoutputstream = new FileOutputStream(gambar);
fileoutputstream.write(bytearrayoutputstream.toByteArray());
fileoutputstream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
ivImage.setImageBitmap(operation);
}
Ich werde Ihnen den Unterschied zwischen dem Bild zeigen. Ich lese nur und speichere und ändere das Pixel nicht. Ich brauche das Pixel nicht geändert, wenn ich es zurückspare.
Glaubst du wirklich, dass wir das wissen? Du solltest deinen Code natürlich veröffentlichen. – greenapps
@greenapps Entschuldigung, ich habe meinen Code jetzt hochgeladen. und ich gebe die ss des Bildpixels. hilf mir bitte, danke – siahaanj
Es gibt keinen Code, der ein Bild liest. Und Sie zeigen vor dem Speichern nicht, was Sie in den Bytearray-Ausgabestream geschrieben haben. Bitte senden Sie einen vollständigen reproduzierbaren Code, den wir testen können. Sie zeigen auch nicht, wie Sie den Wert der Pixel vorher und nachher bestimmen. – greenapps