아래오 같은 소스를 이용해 파일을 저장하는데요.
FileOutputStream fileoutstream = new FileOutputStream(name);
fileoutstream.write(mImageData[0]);
fileoutstream.close();
파일이 sd카드에 보입니다. 용량도 정상적으로 나옵니다.
근데 파일이 열리지 않습니다. 지원하지 않은 ... 이렇게 글이 뜨는데 어디가 잘못됬을까요?
카메라 콜백 함수의 data입니다.
여기 data 파일을 넘져준것입니다.
아마 저 data는 YUV420일건데... 저거 일단 Bitmap으로 바꾸는거 찾아보시구요
Bitmap을 JPG나 PNG로 저장하는 방법을 찾아서 쓰시면 될듯합니다.
카메라 테스트 해본다고 만들어본 소스인데 참고가 되실지 모르겠습니다..
포커스 맞으면 자동으로 찍는다능.. 이미지 확인은.. 프로그램 종료하시고 갤러리들어가셔서...
그냥가자님 호박부침개님 답변 주셔서 감사합니다.
우선 data 를 Bitmap로 바꾸는걸 찾아보겠습니다.
올려주신 소스도 참고해서 보겟습니다. 감사합니다. 해보고 안되면 다시 리플을 달겠습니다~
bitmap 으로 변환 하는 부분을 찾아 보니.
bitmap temp = BitmapFactory.decodeByteArray(data, 0, data.length);
이러 함수가 있어서 사용해봤습니다. 디버깅돌려보면 data에는 내용이 있습니다.
하지만 temp가 null 입니다.... ㅠㅠ
final int frameSize = width * height;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & ((int) yuv420sp[yp])) - 16;
if (y < 0) y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r < 0) r = 0; else if (r > 262143) r = 262143;
if (g < 0) g = 0; else if (g > 262143) g = 262143;
if (b < 0) b = 0; else if (b > 262143) b = 262143;
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
}
}
}
요기 이 함수를 사용할려면.
rgb 값은 멀 넣어줘야 해요???
public void onPictureTaken(byte[] data, Camera c) {
mImageData1[0] = decodeYUV420SP(data,640,480);
Bitmap bitmap = Bitmap.createBitmap(mImageData1[0],640, 480, Bitmap.Config.ARGB_8888);
try{
File file = new File("/mnt/sdcard/23.jpg");
final FileOutputStream filestream = new FileOutputStream(file);
file.createNewFile();
bitmap.compress(CompressFormat.JPEG, 100, filestream);
filestream.close();
}
catch (Exception e) {
// TODO: handle exception
}
mImageData1[0] 이거는 int [6][] 배열로 선언했습니다.
사진이 저장도 되는데 이미지가 아래처럼 깨져서 보입니다.ㅠㅠ
어디가 잘못된거일까요?ㅜ




Bitmap을 Jpg나 PNG로 저장하는 방법은 검색하면 많이 나오는데 저 방법은 mImageData가 어떤내용인가에 따라 다릅니다.