Конференция "Media" » Загрузка png из потока в gdiplus. [D7, WinXP]
 
  • S7r © (24.11.07 18:49) [0]
    Здравствуйте,
    Собственно возникла следующая проблема: при загрузке png файла из потока в gdiplus вываливается access violation. Код следующий:

       OpenDialog1.Execute;
       MemStream:=TMemoryStream.Create;
       MemStream.LoadFromFile(OpenDialog1.FileName);
       StreamAdapt:=TStreamAdapter.Create(MemStream, soOwned);
       Img:=TGPImage.Create(StreamAdapt);//вот здесь access violation
       //Img:=TGPImage.Create(OpenDialog1.FileName);//так все нормально
       gdiGraphics:=TGPGraphics.Create(Form1.Canvas.Handle);
       gdiGraphics.DrawImage(Img, 0, 0, Form1.Width, Form1.Height);



    Странно еще то, что все стабильно работает если загружать файлы других поддерживаемых форматов или если загружать png файл не из потока а напрямую из файла, то все также работает нормально.
  • Efir (24.11.07 20:33) [1]
    Сталкивался тоже с такой же проблемой, задавал вопрос сдесь же, но так и не решил.
  • Efir (24.11.07 20:36) [2]
    И что интересно, если запустить скомпиленный exe, то всё работает нормально.
  • S7r © (24.11.07 23:09) [3]
    А вот у меня скомпилированный exe как раз и не работает. Пишет: Access violation at address 78208BAA in module 'gdiplus.dll'. Read of address 51EC8B91.
    Если запустить в режиме отладки то вылетает окно с CPU и если продолжить выполнение, то все нормально нарисует. Причем в CPU он мне как я понял указывает на какой-то break point в ntdll. Такое чувство, что где-то переполнение и возврат идет не туда...
  • antonn © (24.11.07 23:21) [4]
    после StreamAdapt:=TStreamAdapter.Create(MemStream, soOwned); попробывать
    StreamAdapt.position:=0;
  • S7r © (24.11.07 23:46) [5]
    Установка:
    StreamAdapt.Stream.Position:=0;
    не помогла. Все тоже самое.
    С MemStream.Position таже фигня.
  • antonn © (25.11.07 00:33) [6]
    а Img:=TGPImage.Create(StreamAdapt); что требует? путь до файла или поток?
  • S7r © (25.11.07 09:56) [7]
    Конструктор у TGPImage перегружен.

     constructor TGPImage.Create(filename: WideString; useEmbeddedColorManagement: BOOL = FALSE);

     constructor TGPImage.Create(stream: IStream; useEmbeddedColorManagement: BOOL  = FALSE);

 
Конференция "Media" » Загрузка png из потока в gdiplus. [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]