|
정말 답변 감사드립니다..
오랫동안 고민한 문제인데 해결하였습니다.
다시한번 감사드립니다..
유영인 Cuperido 님이 쓰신 글 :
: 깨진 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 하려구요..
: : : :
: : : : 부탁드립니다.
|