|
깨진 Jpeg을 로딩하면 문제가 좀 있는것 같군요.
그것도 정확히 그 라인에서 문제가 생기는것이 아니라, 함수가 빠져 나올때
생겨서 Try-Catch 문에 걸리지 않는것 같습니다.
그래서, OnException을 이용해서 에러를 검출하는 방법을 택했습니다.
사용하시면서 이벤트를 걸었다 뺐다 하는 방법도 있고, 이벤트 내에서
메시지로 분기해서 에러를 처리하는 방법도 있을 것 같습니다.
cuperido
//---------------------------------------------------------------------------
#include <vcl.h>
#include <jpeg.hpp>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
// 에러 이벤트 설정
Application->OnException = ExceptionFilter;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
Image1->Picture->LoadFromFile("C:\\download\\test.jpg");
} catch (...) {
ShowMessage("오마이갓");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExceptionFilter(TObject *Sender, Exception *ExceptionCode)
{
// 에러 메시지를 보고 분기
if(ExceptionCode->Message.Pos("JPEG") > 0) {
ShowMessage("Jpeg 파일 에러");
}
return;
}
HUMANLSH 님이 쓰신 글 :
: 유영인님 답변 정말 감사합니다.
: 제가 잘못된 jpeg 화일을 걸르려고 사실
: try {
: MultiVideoForm->imgMonitor->Picture->LoadFromFile(strFilename);
: }
: catch (EInvalidGraphic &e) {}
: // 혹은 catch (...) {}
:
: 이렇게 코드를 썼는데
: catch에 걸리지 않고
: 로드하는데서 바로
: JPEG error #67
: 에러 다이알로그 박스가 뜨더군요..
: 이 에러박스 좀 없앨 수 있는 방법이 없을까요?
: 부탁드립니다..
: 첨부는 깨진 jpg 화일입니다..
:
: ======================
:
: 유영인 Cuperido 님이 쓰신 글 :
: : 가장 좋은 방법은 예외처리 try ... catch 를 걸어서 파일을 로드하는 방법이라고 생각하고요,
: : 미리 파일 형식 검출을 하시려면, 정확한 포맷은 컴포넌트에서 제공하는 IsJpegFile 등과 같은
: : 지원 함수가 있으면 사용하시거나, 그렇지 않으면 파일의 앞부분 일부를 읽어서
: : 헤더 비교를 하는 방법이 있습니다.
: :
: : 제가 본 거의 모든 Jpeg은 6~9 Bytes 에 'JFIF' 라는 문자가 들어가 있고요,
: : 이런걸 비교해서 하는 방법이 있겠죠. 하지만, 혹시 행여나 다른 사용자가 사용했던 툴이
: : Jpeg 헤더 기준을 따르지 않았다면, 이 역시 로드될 수 없겠지요.
: : (그럴 가능성도 어쩌면 배재할수는 없겠죠? ^^)
: :
: :
: : cuperido
: :
: : HUMANLSH 님이 쓰신 글 :
: : : 디스크안에 있는 jpg 화일이 실지로 로드될 수 있는 jpeg 화일 format 인지
: : : 구분할 수 있는 방법이 있나요?
: : :
: : : LoadFromFile 함수를 쓰면 간혹 에러나는 화일이 있어 load하기전에 skip 하려구요..
: : :
: : : 부탁드립니다.
|