TImage 구성 요소를 사용하여 Stream에 이미지 저장

1892 단어 TImage
한 항목 때문에 그림을 데이터베이스에 저장해야 하고 필요할 때 데이터베이스에서 읽어야 합니다.처음에는 간단하다고 생각했는데, 하나의 스트림이 아니었다.사실 간단하다.도모야, 코드도 많지만, 다 구덩이야!
TImage의 소스, Picture를 보세요.Graphic 다음에는 loadfrom Stream과 Saveto Stream이 있습니다.만약 틀리지 않았다면, 직접 이 두 함수를 쓰면 된다.그래서 데모 테스트를 했어요.
데모에 티마지 두 개 넣었어요.TImage1에 그림을 넣은 다음 코드로 TImage1의 그림을 Stream에 저장합니다.TImage2 이 Stream에서 그림을 다시 꺼냅니다.자연수가 도랑으로 흐르다.
이것이 바로 나의 코드다.

 PicStream:=TMemoryStream.Create;
 Self.Image1.Picture.Graphic.SaveToStream(PicStream);
 PicStream.Position:=0;
 Self.Image2.Picture.Graphic.loadFromStream(PicStream);
 PicStream.Free;

그러나 사실 그는 잘못을 저질렀다.그래서 나는 바이두를 하고 또 바이두를 만들었다.얻은 결과도 이렇게 썼다.(나는 왜 인터넷에 문제가 있는 코드가 그렇게 많은지 모르겠다. 버전이 다른 이유인가)
그래서 나는 그의 TPicture를 미행했다.Assign은 TPicture를 직접 사용하면Assign 복제 Timage1은 오류가 없습니다.

procedure TPicture.Assign(Source: TPersistent);
begin
 if Source = nil then
  SetGraphic(nil)
 else if Source is TPicture then
  SetGraphic(TPicture(Source).Graphic)
 else if Source is TGraphic then
  SetGraphic(TGraphic(Source))
 else
  inherited Assign(Source);
end;

원래 그는 Assign을 호출할 때 SetGraphic을 호출해서 TGraphic 대상을 만듭니다.
그래서 만약 내가 그래픽을 사용하고 싶다면.loadFromStream이라는 함수는 이 TGraphic 대상을 직접 만들어야 합니다.안 그러면 틀림없이 틀린 거야.그리고 이 TGraphic은 서로 다른 그림 형식에 따라 다른 ClassType을 호출해서 만들어야 합니다.좀 귀찮아졌어요.저는 TJPEGimage의 대상을 사용해서 그의 LoadFrom Stream을 호출하면 Stream을 직접 읽을 수 있기 때문에 게으름을 피웠어요.

 Jpg:=TJPEGImage.Create;
 PicStream:=TMemoryStream.Create;
 Self.Image1.Picture.Graphic.SaveToStream(PicStream);
 PicStream.Position:=0;

 jpg.LoadFromStream(PicStream);
 Self.Image2.Picture.Assign(JPg);
 PicStream.Free;

본인은 책을 많이 읽지 않습니다.이 블로그는 이상하게 썼다.독자 여러분은 잠시만 기다려 주십시오.원래 이 블로그를 쓰고 싶지 않았어요.하지만 사이트의 코드를 보면 D10에서는 사용할 수 없습니다.그래서 망신을 당했어요.

좋은 웹페이지 즐겨찾기