이런 경우 어떻게 합니까?
한개의 화일이 있습니다..
그 화일에는 헤더, JpgImage1, JpgImage2, JpgImage3 등이 들어 갑니다..
일단 저장에는 성공 했습니다..
읽어 들이는 부분이 문제 인데요..
TJPEGImage에 있는 LoadFromStream이라는 메소드를 쓰고 싶습니다..
LoadFromStream를 쓸려면 스트림 객체를 요구 하는데...
그래서 전 TMemoryStream를 선택 했습니다.
보시면 아시 겠지만 BlockRead의 함수를 사용해 Buf라는 포인터로 값을 읽어
오거든요..
근데 그걸 TMemoryStream에 쓸수 있는 방법이 없습니다..
var Buf : PChar;
i : integer;
Jp : TJPEGImage;
Ms : TMemoryStream;
begin
Ms := TMemoryStream.Create;
jp := TJPEGImage.Create;
OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
OpenDialog1.Filter := '*.jpg';
if not OpenDialog1.Execute then OpenDialog1.FileName := '';
//헤더를 읽는다.
AssignFile(ReadFileStream, OpenDialog1.FileName);
Reset(ReadFileStream, 1);
BlockRead(ReadFileStream, FileHader, Sizeof(FileHader));
//헤더를 제외한 실제 Jpg Data의 부분으로 분기 한다.
Seek(ReadFileStream, Sizeof(FileHader) + 100);
//헤더에 있는 싸이즈 만큼 읽는다..
if FileHader.BackImg.ImgSize > 0 then
begin
GetMem(buf, FileHader.BackImg.ImgSize);
ZeroMemory(buf, FileHader.BackImg.ImgSize);
BlockRead(ReadFileStream, buf[0], FileHader.BackImg.ImgSize);
// Ms.ReadBuffer(buf, FileHader.BackImg.ImgSize); --> 이부분
FreeMem(buf, FileHader.BackImg.ImgSize);
end;
try
finally
CloseFile(ReadFileStream);
end;
아시는 분은 답변좀 해주세요...
염치 없지만 감사 합니다..
근데...어느 스트림에서 읽었다는 건지 모르겠습니다..
Ms.ReadBuffer(buf, FileHader.BackImg.ImgSize); --> 이부분은 제가 하다하다 않되서
ReadBuffer까지 다 해봤습니다...
이걸 오해 하신건가여?
그리구여 ReadFileStream : File; 입니다..
지금두 헤메고 있는데..
Write메소드를 사용 하지 않은건 아닙니다...
Ms.Write(buf, FileHader.BackImg.ImgSize) 하면 오류가 일어나고
Ms.Write(buf[0], FileHader.BackImg.ImgSize) 하고난뒤 SaveFromStream하면 아무 내용도 있지 않습니다..
뭐가 잘못된건가여?
아님 다른 방법이라도 좋습니다..
김진호 wrote:
> 이런 경우 어떻게 합니까?
>
> 한개의 화일이 있습니다..
> 그 화일에는 헤더, JpgImage1, JpgImage2, JpgImage3 등이 들어 갑니다..
>
> 일단 저장에는 성공 했습니다..
>
> 읽어 들이는 부분이 문제 인데요..
>
> TJPEGImage에 있는 LoadFromStream이라는 메소드를 쓰고 싶습니다..
>
> LoadFromStream를 쓸려면 스트림 객체를 요구 하는데...
> 그래서 전 TMemoryStream를 선택 했습니다.
>
> 보시면 아시 겠지만 BlockRead의 함수를 사용해 Buf라는 포인터로 값을 읽어
> 오거든요..
> 근데 그걸 TMemoryStream에 쓸수 있는 방법이 없습니다..
>
>
> var Buf : PChar;
> i : integer;
> Jp : TJPEGImage;
> Ms : TMemoryStream;
> begin
> Ms := TMemoryStream.Create;
> jp := TJPEGImage.Create;
>
> OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
> OpenDialog1.Filter := '*.jpg';
> if not OpenDialog1.Execute then OpenDialog1.FileName := '';
>
> //헤더를 읽는다.
> AssignFile(ReadFileStream, OpenDialog1.FileName);
> Reset(ReadFileStream, 1);
> BlockRead(ReadFileStream, FileHader, Sizeof(FileHader));
>
> //헤더를 제외한 실제 Jpg Data의 부분으로 분기 한다.
> Seek(ReadFileStream, Sizeof(FileHader) + 100);
>
> //헤더에 있는 싸이즈 만큼 읽는다..
> if FileHader.BackImg.ImgSize > 0 then
> begin
> GetMem(buf, FileHader.BackImg.ImgSize);
> ZeroMemory(buf, FileHader.BackImg.ImgSize);
> BlockRead(ReadFileStream, buf[0], FileHader.BackImg.ImgSize);
> // Ms.ReadBuffer(buf, FileHader.BackImg.ImgSize); --> 이부분
> FreeMem(buf, FileHader.BackImg.ImgSize);
> end;
>
> try
>
> finally
> CloseFile(ReadFileStream);
> end;
>
> 아시는 분은 답변좀 해주세요...
> 염치 없지만 감사 합니다..
>