Caesar Posted June 30, 2008 Report Share Posted June 30, 2008 Chcę użyć plików PNG w Omedze, kiedy dodam je z poziomu Delphi do OmegaImageList i potem użyję w programie to wszystko jest ok (używam biblioteki GraphicEx, bo wcześniej i to nie działało, a PNGImage nic nie daje). Kiedy natomiast wczytam plik PNG z pliku OIL i chcę go użyć, to wyskakuje mi błąd Acces Violation. Nie wiem, dlaczego. Proszę o pomoc... Link to comment Share on other sites More sharing options...
HNB Posted June 30, 2008 Report Share Posted June 30, 2008 Nie używaj GraphicEx! Zawiera błędy (pointery oraz błędy logiczne w zaprojektowanych klasach - oba rodzaje takowych odczułem dotkliwie na własnej skórze) i powoduje przecieki pamięci! Dużo lepszą biblioteką jest Vampyre Imaging Library. Być może błąd leży po stronie GraphicEx (zresztą jest już od dawna nierozwijane, w przeciwieństwie do imaginglib). soon Delphi will be only for veterans and finally we all will die at the end… delphi.dathox.com - nowinki z świata Delphi/Pascala only programmers and drug dealers call their customers "users" Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą. Link to comment Share on other sites More sharing options...
Toster Posted July 1, 2008 Report Share Posted July 1, 2008 Duzo lepsza od Omegi jest BEngine, http://www.assembla.com/wiki/show/BEngine Tym bardziej ze ma wsparcie po polsku Always Dark<br /> Link to comment Share on other sites More sharing options...
Caesar Posted July 1, 2008 Author Report Share Posted July 1, 2008 Prawie każdy odsyła mnie do innych komponentów: Asphyre, Omega. Ten pierwszy jest dla mnie niezrozumiały. Wziąłem Omegę, gdyż jest podobny do DelphiXa, a w nim mam już jakieś doświadczenie. Teraz odsyłasz mnie do BEngine. A za chwilę ktoś inny odeśle mnie do jeszcze innego zestawu komponentów. Ja chcę tylko rozwiązać problem z PNG... GraphicEx nie wywala mi błędu, tylko OmegaImageList. Link to comment Share on other sites More sharing options...
Force Posted July 1, 2008 Report Share Posted July 1, 2008 HNB napisał Ci jaki jest problem. A Toster robi kryptoreklamę Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
Caesar Posted July 1, 2008 Author Report Share Posted July 1, 2008 Byłeś wcześniej z postem niż moja edycja... Link to comment Share on other sites More sharing options...
Toster Posted July 1, 2008 Report Share Posted July 1, 2008 Co do problemu z AV to nikt ci na to nie odpowie co robisz ze bo: 1. nie widzimy kodu 2. problemy z AV to problemy z pointerami, a tylko ty i twoj debuger sa w stanie to namierzyc Sytuacja moze byc taka ze wszystko dziala dobrze, ale np kasujesz obiekt gdzies a w miejscu w ktorym sie do niego odwolujesz masz stara referencje i masz AV. Albo masz nadpisanie pamieci i ci sie wysypuje, albo okazuje sie ze tak naprawde z PNG jest wszystko ok ale chcesz rysowac po uszkodzonym obiekcie. itd... opcji jest multum. Always Dark<br /> Link to comment Share on other sites More sharing options...
Caesar Posted July 1, 2008 Author Report Share Posted July 1, 2008 Oto kod: unit code_Mapa; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OmegaTimer, OmegaFont, OmegaScreen, ExtCtrls, OmegaSurface, OmegaImageList, Imaging, TMyImage, Math, StdCtrls, GraphicEx; type TfMapa = class(TForm) pEkran: TPanel; Ekran: TOmegaScreen; Font: TOmegaFont; Timer: TOmegaTimer; IL: TOmegaImageList; pKierunki: TPanel; pN: TMImage; pE: TMImage; pS: TMImage; pW: TMImage; sKierunki: TShape; iRamka: TImage; procedure FormCreate(Sender: TObject); procedure TimerTimer(Sender: TObject); // nie dotyczy private { Private declarations } public { Public declarations } procedure DeltaPos; end; var fMapa: TfMapa; delta: Integer = 20; deltaX, deltaY: Integer; zx, zy, dx, dy: Integer; implementation {$R *.dfm} procedure TfMapa.DeltaPos; var szer, wys: Integer; sekran, wekran: Integer; begin szer:=IL.ImageList.Items[0].ImageWidth; wys:=IL.ImageList.Items[0].ImageHeight; sekran:=Ekran.Width; wekran:=Ekran.Height; deltaX:=Max(Min(deltaX, 0), -(szer - sekran)); deltaY:=Max(Min(deltaY, 0), -(wys - wekran)); Ekran.OffsetX:=deltaX; Ekran.OffsetY:=deltaY; end; procedure TfMapa.FormCreate(Sender: TObject); begin Ekran.SetHWnd(pEkran.Handle); Ekran.Init; Font.Init; IL.Init; Font.CreateFont('Verdana', 12, [fsBold]); Font.Color:=OmegaColor(128, 128, 128); Timer.Enabled:=True; IL.ImageList.LoadFromFile('grafika.oil'); IL.ImageList.Items[IL.ImageList.Count - 1].Init; deltaX:=0; deltaY:=0; iRamka.Picture.LoadFromFile('ramka mapa.png'); end; procedure TfMapa.TimerTimer(Sender: TObject); begin Ekran.BeginRender; Ekran.ClearScreen(0, 0, 0); Font.Print(5, 5, IntToStr(Timer.FPS)); IL.ImageList.Items[0].Draw(0, 0, 1); IL.ImageList.Items[1].Draw(-deltaX, -deltaY, 1); Ekran.EndRender; end; // nie dotyczy - zdarzenia obsługi myszy itd. W pliku grafika.oil są dwie grafiki, pierwsza w jpg, druga w png. Kiedy zostawiam tylko jpg (1 grafika) to wszystko jest ok, ale gdy dorzucę png, to nic nie działa. Błąd wywala w 435 linii pliku OmegaImageList.pas . Możliwe, że robię coś źle (np. wczytywanie pliku z grafikami). Ale nie wiem. Link to comment Share on other sites More sharing options...
Mr.Protek Posted July 1, 2008 Report Share Posted July 1, 2008 A może zmień linijkę: IL.ImageList.Items[iL.ImageList.Count - 1].Init; na: IL.Init; Może pomoże Link to comment Share on other sites More sharing options...
Caesar Posted July 3, 2008 Author Report Share Posted July 3, 2008 Udało mi się znaleźć rozwiązanie. Zamiast linijki: IL.ImageList.Items[IL.ImageList.Count - 1].Init; To rozwiązuje problem wczytywanych plików w ogóle. Ale pojawił się następny. Nie działa kanał alpha, a właśnie dla niego zdecydowałem się na pliki PNG. Link to comment Share on other sites More sharing options...
sazian Posted July 3, 2008 Report Share Posted July 3, 2008 nie mam obecnie omegi ale wydaje mi się że trzeba włączyć opcje transparent dla każdego obrazka Link to comment Share on other sites More sharing options...
Mr.Protek Posted July 4, 2008 Report Share Posted July 4, 2008 Zamiast tej całej pętli inicjującej wystarczy napisać tak jak pisałem wcześniej: "IL.Init;" Sam pisze grę w Omedze http://www.pogromcypotworow.yoyo.pl I stosuje w niej pliki PNG jak i JPG. U mnie kanał alpha działa normalnie, ale mam z nim inny problem, gdy jest włączony antyaliasing to do okoła wyświetlanego obrazka rozmywa się lekko kolor przezroczysty (taki jaki widać przy otwarciu pliku PNG w Paincie). Dlatego nie używam plików PNG z kanałem alpha. Zamiast tego wyświetlam je tak jak zwykłe pliki BMP, czyli włączam transparent dla każdego obrazka i ustawiam kolor przezroczysty Link to comment Share on other sites More sharing options...
Caesar Posted July 24, 2008 Author Report Share Posted July 24, 2008 Mógłbyś podać jakieś bliższe informacje...? Tzn. sposób użycia plików, kawałek kodu (a jeśli możesz, to jakieś proste demo) ustawienia z jakich korzystasz, parametry plików PNG (tło, przeplot, itp.), wersja Delphi (moja 7). Po prostu, jak TY to robisz, że działa... Korzystasz z jakichś rozszerzeń do obsługi PNG? Z góry dzięki Link to comment Share on other sites More sharing options...
Mr.Protek Posted July 24, 2008 Report Share Posted July 24, 2008 Ja też używam Delphi 7. Nie korzystam z żadnych rozszerzeń do obsługi PNG Jakkolwiek użyję to u mnie działa, czy wczytuję z pliku OIL, czy ustawiam tylko ścieżkę z której ma czytać plik PNG z dysku. Nie wiem czemu u ciebie nie działa Ja ustawiam tylko Transparent na TRUE i kolor na mój kolor przezroczysty i tyle Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.