Image1 i zasoby RC

0

Temat powracający zawsze gdy musimy wstawić coś z zasobów RC do Image1 i podmieniać to na
zasadach podobnych do animacji.

Pliki w zasobach to format *.JPG aby mało zajmowały miejsca dwa osobne obrazki.
Działanie: procedura ma wstawić obrazek *.JPG do Image1 zamienić go z formatu JPG na
typową bitmapę aby klasyczne operacje w rodzaju Image1.Canvas.CopyRect() mogły
coś przemieścić na naszym Image1.

Przykładowa procedura nie działa! Moje pytanie jak to powinno być poprawnie?

 

implementation

{$R Zasoby_RC\Bitmapy.res}

procedure TForm1.Button1Click(Sender: TObject);
var
Temp_ON,Temp_OFF:   TResourceStream;
jpg : TJPEGImage;
begin

     try
          Temp_ON:=TResourceStream.Create(hinstance, 'JPG_Term_ON', RT_RCDATA);
          Temp_OFF:=TResourceStream.Create(hinstance, 'JPG_Term_OFF', RT_RCDATA);

          Image1.Picture.Graphic:=TJPEGImage.Create; 
          Image1.Picture.Graphic.LoadFromStream(Temp_ON);


          if Image1.Picture.Graphic is TJPEGImage then
          begin
               jpg := TJPEGImage.Create;
               jpg.Assign(Image1.Picture);   //odczytujemy to co jest w Image1, przekształcamy na bmp i zapisujemy z powrotem do Image1
               jpg.DIBNeeded;
               Image1.Picture.Bitmap.Assign(jpg);
               jpg.Free;
          end;

          //Tu przemieszczam pasek na Image1


          Application.ProcessMessages;
          Sleep(2000);

          Image1.Picture.Graphic.LoadFromStream(Temp_OFF);

          if Image1.Picture.Graphic is TJPEGImage then
          begin
               jpg := TJPEGImage.Create;
               jpg.Assign(Image1.Picture);   //odczytujemy to co jest w Image1, przekształcamy na bmp i zapisujemy z powrotem do Image1
               jpg.DIBNeeded;
               Image1.Picture.Bitmap.Assign(jpg);
               jpg.Free;
          end;

           //Tu przemieszczam pasek na Image1

          Application.ProcessMessages;
          Sleep(2000);



     except
           Temp_ON.Free;
           Temp_OFF.Free;

     end;

end;

0

Ale co nie działa konwersja z JPG na BMP czy nie ładuje obrazka z zasobów?
Jeżeli masz w pliku rc tak:
JPG_TERM_ON RT_RCDATA "obrazek.jpg"
to kod ładowanie z zasobów i zmiana na bmp (załadowanie do image ale równie dobrze można utworzyć inny obiekt typu TBitmap i do niego załadować)

var
  Temp_ON: TResourceStream;
  jpg: TJPEGImage;
begin
  Temp_ON:=TResourceStream.Create(hInstance, 'JPG_TERM_ON', 'RT_RCDATA');
  try
  jpg:=TJPEGImage.Create;
  try
  jpg.LoadFromStream(Temp_ON);
  Image1.Picture.Bitmap.Assign(jpg);
  finally
  jpg.Free;
  end;
  finally
  Temp_ON.Free;
  end;
end;
0

Problemem powstaje podczas konwersji dla pierwszego *.JPG wszystko działa prawidłowo ale
kiedy chce załadować kolejny JPG do tego samego Image1 pojawia się komunikat 'Bitmap image is not valid'???

0

To ładuj obrazki taki jak ja wyżej w ten sposób działa dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1