Hi all,

I have data stored in a memory stream, i am trying to use SDL_Image to load the image.

I currently have the following code:

Code:
var
  SDLStream: TSDL_RWops;

  SDLStream := StreamToRWops(_XPacks.Items[Index].GetStream(Filename).Stream);
  Surface := IMG_Load_RW(@SDLStream, 1);
  If Surface = Nil Then Exit;
Code:
function Seek(Context: PSDL_RWops; Offset: Integer; Whence: Integer): Integer;
var
  Stream: TStream;
begin
  Stream := TStream(Context^.unknown.data1);
  If Stream = Nil Then
  Begin
    Result := -1;
    Exit;
  End;

  Case Whence Of
       SEEK_SET: Stream.Position := Offset; 
       SEEK_CUR: Stream.Position := Stream.Position+Offset;
       SEEK_END: Stream.Position := Stream.Size+Offset;
  End;
  Result := Stream.Position; 
end;
 
function Read(Context: PSDL_RWops; Ptr: Pointer; Size: Integer; Maxnum: Integer ): Integer;
var
  Stream: TStream;
begin
  Stream := TStream(Context^.unknown.data1);
  If Stream = Nil Then
  Begin
    Result := -1;
    Exit;
  End;
  Result := Stream.Read(Ptr^, Size*Maxnum) Div Size;
end;

function Write(Context: PSDL_RWops; Ptr: Pointer; Size: Integer; Num: Integer ): Integer;
var
  Stream: TStream;
begin
  Stream := TStream(Context^.unknown.data1);
  If Stream = Nil Then
  Begin
    Result := -1;
    Exit;
  End;
  Result := Stream.Write(Ptr^, Size*Num) Div Size; 
end;

function Close(Context: PSDL_RWops): Integer;
var
  Stream: TStream;
begin
  Stream := TStream(Context^.unknown.data1); 
  if Stream = nil then
  begin
    Result := -1;
    Exit;
  end;
  Stream.Destroy; 
  context^.unknown.data1 := nil; 
  Result := 0;
end;
 
function StreamToRWops(Stream: TStream): TSDL_RWops;
begin
  Result.type_ := 2;
  Result.unknown.data1 := Stream; 
  Result.seek := @Seek;
  Result.read := @Read;
  Result.write := @Write;
  Result.close := @Close;
end;

procedure RWopsToStream(RW: PSDL_RWops; Stream: TStream);
var
  Buf: Pointer; 
  Read: Integer; 
begin
  If Stream = Nil Then Exit; 
  If RW = Nil Then Exit;
  GetMem(Buf, 1024);
  Try
    Read := RW^.Read(RW, Buf, 1, 1024); 
    While Read > 0 Do
    Begin
      Stream.Write(Buf^, Read);
      Read := RW^.Read(RW, Buf, 1, 1024);
    End;
  Finally
    FreeMem(Buf);
  End;
end;
Everytime i get to the stage of loading the data to IMG_Load_RW i get an access violation.

Does anyone know if im i missing something?

Many Thanks