|
성연님 감사드립니다~
많은도움이 되었습니다!!!
코드를 약간 수정하여 원하는바를 해결했습니다.
EZW는 웨이블릿기반 영상압축 방법입니다. JPEG2000정도의 효율을 보여준다는군요 ..
기념으로 압축해제한 영상하나 올려드리죠
김성연 님이 쓰신 글 :
: 곽성주 님이 쓰신 글 :
: : 잘돌아가는 델파이코드인데 빌더로 바꾸려면 에러가 나에요 --;
: : dll 함수 부르는 부분에서 영상데이타 넘기는 방법이 빌더로 잘 모르겟어요.
: : dll 파일 첨부했습니다.
: :
: : function raw2ezwf(var RawData:Byte; ls_des_filename:string; iWidth,iHeight:longint;
: : fBitRate:single; iLevel:integer; iWavelet:longint):longint; stdcall; external 'ezw.dll'
: :
: : ...
: : ...
: : var
: : fs: TFileStream;
: : img_data: array of Byte; // 이미지 데이타 저장공간
: :
: : file_name, ezw_name: string; // 입출력 파일명
: : dummy: longint;
: : // i,j,k: integer;
: : begin
: : file_name:='c:\g512x512.bmp';
: : ezw_name:='c:\test.ezw';
: :
: : fs := TFileStream.Create(file_name, fmOpenRead);
: : try
: : img_size := fs.Size;
: : SetLength(img_data, img_size);
: : // pointer 로 형 변환후 ^를 추가
: : fs.Seek(1079, soFromBeginning );
: : fs.Read(pointer(img_data)^, img_size);
: : // BitRate=0.4, Level=6, Wavelet=2
: : dummy:=raw2ezwf(img_data[0], ezw_name, 512, 512, 0.4, 6, 2); <<--여기서 이미지데이타 넘기기가 안되네
: : finally
: : fs.free;
: : ShowMessage('Successful !');
: : end;
: : end;
:
: extern "C" __declspec(dllimport)
: long __stdcall raw2ezwf(unsigned char *RawData, String ls_des_filename, long iWidth, long iHeight,
: float fBitRate, int iLevel, long iWavelet);
:
:
:
: {
: TFileStream *fs;
: unsigned char *img_data;
: String file_name, ezw_name;
: long dummy;
: int i,j,k;
:
: file_name = "c:\\g512x512.bmp";
: ezw_name = "c:\\test.ezw";
:
: if ( ! ExistFile(file_name) ) { return -1; }
: fs = new TFileStream( file_name, fmOpenRead | fmShareDenyNone );
: img_data = new unsigned char[img_size];
: __try
: {
: img_size = fs->Size;
: fs->Seek( 1079, soFromBeginning );
: fs->Read( img_data, img_size );
: dummy = raw2ezwf( &(img_data[0]), ezw_name, 512, 512, 0.4f, 6, 2); // var 는 콜바이 레퍼런스로, 적당한 포인터나 참조형이 필요한데, 대개 포인터를 쓸겁니다.
: }
: __finally
: {
: delete img_data;
: delete fs;
: ShowMessage("Working Finished !"); // 예외가 발생해도 여기는 지나가므로..
: }
: }
:
: 맞는지 잘 몰겠네요 -_-;;
|