public void Binarization(Camera mCamera/*, final SurfaceHolder mHolder*/)
{
final Camera finalMCamera = mCamera;
mCamera.setPreviewCallback(new Camera.PreviewCallback()
{
public void onPreviewFrame(byte[] data, Camera camera)
{
Camera.Parameters params = finalMCamera.getParameters();
int w = params.getPreviewSize().width;
int h = params.getPreviewSize().height;
int format = params.getPreviewFormat();
YuvImage image = new YuvImage(data, format, w, h, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Rect area = new Rect(0, 0, w, h);
image.compressToJpeg(area, 50, out);
Bitmap Bit = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());
for (int i = 0; i < data.length; i++)
{
if (Bit.getPixel(i / Bit.getWidth(), i % Bit.getWidth()) >= 128)
Bit.setPixel(i / Bit.getWidth(), i % Bit.getWidth(), 256);
else
{
Bit.setPixel(i / Bit.getWidth(), i % Bit.getWidth(), 1);//134라인
}
Log.d("Tag", String.valueOf(i));
}
try
{
FileOutputStream fos = openFileOutput("test.png", 0);
Bit.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
Log.d("Tag", "Bin");
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), "file error", Toast.LENGTH_LONG).show();
final int d = Log.d("Tag", "error");
}
}
});
}
===========================
java.lang.IllegalStateException
at android.graphics.Bitmap.setPixel(Bitmap.java:1791)
at com.example.ai.jangtok.MainActivity$1.onPreviewFrame(MainActivity.java:134)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1183)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7406)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
이렇게가 코드와 오류 내용이구요 어디가 134라인인지는 주석으로 적어두었습니다.
또 이 메소드가 실행한 후에 로그를 기록하게끔 해두었는데
Bin, error 아무것도 기록이 안되고 이메소드를 호출한 다음 라인에서 로그가 기록되었습니다.
그러면 저 메소드가 끝까지 실행되지 않은 상태에서 return되었다고 생각합니다.
어떤 이유때문에 이렇게 된건지 설명해주세요 부탁드립니다.