Obraz PGM w TImage.

0

Witam. Próbuje wczytać obraz PGM do komponentu TImage poleceniem image.picture.loadfromfile ale bez skutku... Ktoś może robił z was kiedyś coś takiego albo orientuje sie jak tego dokonać?

0

Nie napisałeś nawet na jakim środowisku pracujesz...

Jeśli chodzi o dziadziusiowate Delphi 7 - standardowy TImage nie obsługuje tego typu plików, za to:

  • jpg
  • jpeg
  • bmp
  • ico
  • emf
  • wmf
    owszem; Nawet żeby wykorzystać png trzeba dodatkowe komponenty instalować (np. TPNGImage); Poszukaj w sieci jakichś dodatków pozwalających przechowywać taki typ pliku w ww. kontrolce;

Szczerze mówiąc pierwszy raz spotykam się z takim formatem plików (wstyd...);
Dla zainteresowanych: PGM Format Specification;

Gdybyś korzystał z nowszego środowiska jakim jest Lazarus - standardowy TImage obsługuje więcej formatów plików graficznych, w tym wspomniane *.pgm;

0

Tak Pracuje na Delphi7.

Może przybliże o co dokładnie mi chodzi bo pisałeś wcześniej o bibliotece TPNGImage obsługujacej pliki PNG a nie PGM. Ciężko mi znaleźć jakąkolwiek bibilioteke obsługującą właśnie PGM . Zależy mi na tym formacie ponieważ łatwo mi tam pobrać wartości poszczególnych pikseli (wystarczy że wczytam jak zwykły plik tekstowy i mam Od razu dostęp do wspomnianych wartości pikseli ). Może orientujesz się czy mógłbym jakoś wczytać wartości pikseli z pliku PNG wtedy biblioteka TPNGImage byłaby dla mnie całkiem rozsądnym rozwiązaniem ?

1

Obrazki PGM możesz otwierać (nie tworzyć) wykorzystując ImageFileLib v.1.16 http://www.torry.net/authorsmore.php?id=4130 do obsługi obrazów tego typu potrzebna jest zewnętrzna biblioteka DLL JasPerLib.dll (zawarta w paczce).

0

Zawsze możesz samemu napisać bibliotekę wczytującą takie pliki...

1

Z BMP też możesz czytać piksele "od razu", format pliku jest bardzo prosty.

0

Super! Wielkie dzieki !
Jeszcze tylko chciałbym sie dowiedzieć jak odczytać wartości poszczególnych pikseli z pliku PNG. (niekoniecznie w delphi chociaż byłoby fajnie )
Jeszcze bardziej naświetle problem. Z rendera otrzymuje obraz PNG 16bit. czyli każdy piksel reprezentowany jest przez wartość od 0 do 65000 z kawałkiem (dla obrazu czarno-białego)(chyba sie nie myle ??). Początkowo w IrfanView przerabiałem sobie plik do postaci PGM i miałem elegancki dostęp do pikseli jednakże IrfanView tworzył mi obraz 8bit czyli każdy piksel reprezentowany było wartością od 0 do 255 dla mojego projektu jest to zbyt mała rozpiętość ... Potrzebuje odczytać obraz 16bit.. Walczę już z tym od jakiegoś czasu z marnymi skutkami dlatego bardzo prosze o pomoc

@kAzek : Czy po użyciu tej biblioteki przez ciebie będę miał podgląd tego zdjecia pgm czy tylko wczytuje on bajt po bajcie bez poglądu ?
@kAzek : z tego co widze ta bibilioteka obsługuje również PNG czy to oznacza że będę miał dzieki niej dostęp do każdego piksela na obrazie ?

1

Jeszcze tylko chciałbym sie dowiedzieć jak odczytać wartości poszczególnych pikseli z pliku PNG.

Masz rację, po co używać gotowej biblioteki, lepiej pisać od nowa coś czego nie umiesz napisać. Weź się zastanów nad tym co ty chcesz osiągnąć. Jak chcesz za wszelką cenę napisać swoją bibliotekę do odczytu PNG to googluj, ale podpowiem że to 'hardkorowe' dla newbie takiego jak ty (bo TBrain.active=false). A jak jednak się opamiętasz i odkryjesz to że istnieją gotowe biblioteki to też google.

0

Gdybym nie potrzebował znać wartości każdego z pikseli to bym tu nie prosił o pomoc.

A co robią inne biblioteki? Czytają co drugi piksel? Możesz je przerobić do swoich potrzeb. Myślisz czasem?
Zresztą czy po wczytaniu nie można pobrać z TImage wartości wszystkich pikseli? Hmhm.

Skoro mówisz że istnieje gotowa bibilioteka która umożliwi mi odczyt poszczególnych wartości pikseli z 16bitowego obrazu PNG to może mi podpowiesz..

jasne! www.google.pl

Chyba że dla takiego MISTRZA programowania to zbytnia błahostka aby sie tym zająć

ja się tym umiem zająć, ale przecież to nie mnie uczymy tylko Ciebie. Nie mam potrzeby szpanowania, ostatnio zaspokoiłem ją szyfratorem relokacji ;) .
Użyj googla, wybierz jakąś bibliotekę PNG z źródłem i przerób ją tak żeby wypluwała ci kolejne piksele. Jak nie umiesz to może powinieneś zająć się czymś łatwiejszym?

0

@kozi555 - coś nie bardzo chyba wiesz jakiego formatu użyć; Najpierw piszesz o PGM, że wystarczy Ci obraz w skali szarości bo ma prostą budowę i ogólnie go chwalisz, a potem piszesz, że PNG też mógłby być;

Jednak te dwa formaty służą do trechę innych rzeczy, ten pierwszy obsługuje obrazy w skali szarości bez kanału alfa, zo to PNG obsługuje stopniowaną przezroczystość i 48-bitową głębię kolorów dla dowolnych obrazów RGB (a przy RGBA nawet 64 bity per piksel), dodatkowo zawartość jest bezstratnie kompresowana;

Zastanów się więc z którego formatu chcesz korzystać; Poza tym mylisz się, z podanej przeze mnie specyfikacji formatu PGM wynika, że na jeden piksel może składać się zarówno 8 bitów (jeśli wartość koloru mieści się w [0 .. 255]) lub 16 bitów (dla wartości od 256 do 65535):

PGM Format Specification napisał(a)
  1. The maximum gray value (Maxval), again in ASCII decimal. Must be less than 65536, and more than zero.

[...]

  1. A raster of Height rows, in order from top to bottom. Each row consists of Width gray values, in order from left to right. Each gray value is a number from 0 through Maxval, with 0 being black and Maxval being white. Each gray value is represented in pure binary by either 1 or 2 bytes. If the Maxval is less than 256, it is 1 byte. Otherwise, it is 2 bytes. The most significant byte is first.

stąd format zaoszczędza trochę pamięci;

Zanim zaczniesz cokolwiek kombinować to zastanów sie dobrze nad tym, z jakiego formatu chcesz skorzystać (dla początkującego dobrym sprawdzianem będzie *.pgm lub tak jak napisał @adf88 - *.bmp); Jak już zdecydujesz się to siadaj na Google i szukaj wszelkich dokumentacji wybranego formatu i czytaj, czytaj, czytaj... Inaczej w kółko będziesz wracał na forum i pytał o rzeczy, których można się dowiedzieć z sieciowych materiałów;

-123oho napisał(a)

Nie mam potrzeby szpanowania, ostatnio zaspokoiłem ją szyfratorem relokacji ;) .

No nie możliwe, pierwszy raz widzę Cię zadowolonego :]

0

W zasadzie BMP i PNG są bardzo podobne. Cechy wspólne:

  • obraz zapisywany binarnie w postaci bitmapy pikseli
  • możliwość stosowania różnych trybów (od 1bpp po ARGB* i palety)
  • kompresja bezstartna*

* W BMP można zapisać sobie kanał alfa. To jak zinterpretuje go program czytający plik zależy od niego. Zazwyczaj jest ignorowany.
* W przypadku PNG kompresja to standard. W BMP już gorzej, niby format pliku mówi o RLE ale nie wiem jakie jest wsparcie dla tego. Tak na prawdę to możemy sobie skompresować dane jak nam się żywnie podoba, kwestia interpretacji jest znowuż po stronie programu czytającego plik.

1
furious programming napisał(a):
-123oho napisał(a)

Nie mam potrzeby szpanowania, ostatnio zaspokoiłem ją szyfratorem relokacji ;) .

No nie możliwe, pierwszy raz widzę Cię zadowolonego :]

Przepraszam :P . Nie od razu może 'zadowolony', ale oejku coś pozytywnego napisałem. Zdarza mi się, sorry :P .

0
adf88 napisał(a)
  • W BMP można zapisać sobie kanał alfa. To jak zinterpretuje go program czytający plik zależy od niego. Zazwyczaj jest ignorowany.

Ja jeszcze nie widziałem programu, który podczas odczytu zwraca uwagę na ten kanał... Mogę się myslić, ale dawniej jak korzystałem z Photoshop'a to też nie obsługiwał go; Dziwne, bo skoro jest taka możliwość to dlaczego tego się nie stosuje? Dlaczego najpopularniejsze programy graficzne nie interpretują go...? Badań nie przeprowadzałem, grafikiem nie jestem, ale naprawdę nie spotkałem jeszcze takiego edytora...

adf88 napisał(a)

Tak na prawdę to możemy sobie skompresować dane jak nam się żywnie podoba, kwestia interpretacji jest znowuż po stronie programu czytającego plik.

Właśnie, zawsze można zapisać sobie grafikę przez standardowo zaimplementowane funkcje, a po zapisie skompresować plik, nawet własnymi narzędziami; Jednak pisząc własny program do wyświetlania/edycji grafik warto samemu napisać obsługę danego formatu (jeśli oczywiście czuje się na siłach);

0

a jeszcze nie widziałem programu, który podczas odczytu zwraca uwagę na ten kanał... Mogę się myslić, ale dawniej jak korzystałem z Photoshop'a to też nie obsługiwał go; Dziwne, bo skoro jest taka możliwość to dlaczego tego się nie stosuje? Dlaczego najpopularniejsze programy graficzne nie interpretują go...?

Z tego co się orientuję to na początku te pola były reserved i nigdy nie wprowadzono rozszerzenia które mówiłoby jednoznacznie że tu zawsze jest alfa. Zastąpiono to lepszymi formatami które wspierały kompresje etc. .

O ile mi wiadomo, BMP można także animować. Inna sprawa, że nie spotkałem się z programem, który to obsługuje.

A jak zrobię swoje rozszerzenie które będzie BMP zamieniać w modele 3d? To nagle się okaże że BMP jest formatem modeli? No właśnie nie, bo to że ktoś coś zrobił nie znaczy wcale że jest to szeroko używane/rozpoznawane przez programy. Nigdy nie spotkałem się z animowanym BMP co świadczy o tym że takie coś nie jest używane - a jak coś nie jest widoczne ale chodzą o tym słuchy to to jest legenda...

0

Rzeczywiście, legenda: http://technet.microsoft.com/en-us/library/dd361868.aspx ... Ogólnie "animated bmp" wyświetla sporo różnych artykułów.

W googlach można znaleźć także legendy :) . Wszyscy dzisiaj używają animowanych GIFów.

0

@furious programming Mówiłes żebym sie zastanowił z jakiego formatu pliku mam korzystać. Otóż nie mam za bardzo sie nad czym zastanawiać ponieważ w programie do Grafiki 3D renderuje sobie obraz formatu PNG - 16bit. Jest to jedyny format pliku 16bitowy czyli taki o jaki mi chodzi. No i teraz zaczyna się problem ponieważ z tego pliku potrzebuje wartości poszczególnych pikseli (będą to wartości z zakresu 0 - 65000 z kawałkiem . Chyba się nie myle ? Jak tak to mnie poprawcie ). @-123oho wspomniał iż istnieją biblioteki do wczytania pliku PNG do komponentu TImage i z tamtego komponentu będę mógł wyciągnąć te piksele (dalej mówimy tu o wartościach od 0 do 65000 z kawałkiem ) i wczytać je do tablicy dwuwymiarowej np 650 x 650 zgodnie z rozdzielczością obrazka ? Jeżeli tak to jestem w domu. I tak będę to próbował robić.

Jeżeli nie to pozostawałaby mi tylko przekonwertować plik PNG na PGM no i stamtąd prościutko już można odczytać te wartości. Tylko że przekonwertowany plik PGM musiałby być 16bitowy. A nigdzie w sieci nie znalazłem programu który by to potrafił ( PNG16bit na PGM16bit).

Gdybyście coś doradzili nt. tego co własnie w tym wypadku mam robić to będę wdzięczny :))

Aha no i jeszcze wcześniej trzeba by było zamienić go tak by był to obraz w skali szarości prawda ?

Ajjjj... Mam już prawie ukończony program, a z tym sobie rady dać nie mogę ...

1
kozi555 napisał(a)

No i teraz zaczyna się problem ponieważ z tego pliku potrzebuje wartości poszczególnych pikseli (będą to wartości z zakresu 0 - 65000 z kawałkiem . Chyba się nie myle ? Jak tak to mnie poprawcie ). @-123oho wspomniał iż istnieją biblioteki do wczytania pliku PNG do komponentu TImage i z tamtego komponentu będę mógł wyciągnąć te piksele (dalej mówimy tu o wartościach od 0 do 65000 z kawałkiem )

Czy Ty naprawdę uważasz, że ja nie wiem co to jest typ Word (wspomniana liczba 16-bitowa)...? Otóż istnieją biblioteki tak samo jak instalowalne kontrolki - po instalacji możesz śmiało pakować obrazy *.png do zwykłego TImage (jeśli nadal korzystasz z Delphi 7 - nowsze środowiska w pełni obsługują ten format);

kozi555 napisał(a)

i wczytać je do tablicy dwuwymiarowej np 650 x 650 zgodnie z rozdzielczością obrazka ?

No to trzeba trochę poczytać o tym, w jaki sposób się to robi; Ja do samego odczytania szerokości i wysokości obrazu używałem takiego kodu:

procedure GetPNGDimensions(const sFileName: String; var wWidth, wHeight: Word);

  function ReadMWord(fsFile: TFileStream): Word;
  type
    TMotorolaWord = record
      case Byte of
        0: (Value: Word);
        1: (Byte1, Byte2: Byte);
    end;
  var
    MW: TMotorolaWord;
  begin
    fsFile.Read(MW.Byte2, SizeOf(Byte));
    fsFile.Read(MW.Byte1, SizeOf(Byte));

    Result := MW.Value;
  end;

type
  TPNGSig = array [0..7] of Byte;
const
  ValidSig: TPNGSig = (137, 80, 78, 71, 13, 10, 26, 10);
var
  Sig: TPNGSig;
  fsFile: TFileStream;
  I: Integer;
begin
  FillChar(Sig, SizeOf(Sig), #0);
  fsFile := TFileStream.Create(sFileName, fmOpenRead);

  try
    fsFile.Read(Sig[0], SizeOf(Sig));

    for I := Low(Sig) to High(Sig) do
      if Sig[I] <> ValidSig[I] then Exit;

    fsFile.Seek(18, 0);
    wWidth := ReadMWord(fsFile);

    fsFile.Seek(22, 0);
    wHeight := ReadMWord(fsFile);
  finally
    fsFile.Free;
  end;
end;

Jeżeli potrzebujesz wpakować kolory pikseli do macierzy dwuwymiarowej to musisz jeszcze trochę poczytać na temat tego formatu;

kozi555 napisał(a)

Tylko że przekonwertowany plik PGM musiałby być 16bitowy. A nigdzie w sieci nie znalazłem programu który by to potrafił ( PNG16bit na PGM16bit).

Ile razy jeszcze będę Ci powtarzać, że ten format plików graficznych obsługuje 16-bitowe kolory szarości...? Jeszcze raz przekleję słowa ze specyfikacji:

PGM Format Specification napisał(a)
  1. The maximum gray value (Maxval), again in ASCII decimal. Must be less than 65536, and more than zero.

[...]

  1. A raster of Height rows, in order from top to bottom. Each row consists of Width gray values, in order from left to right. Each gray value is a number from 0 through Maxval, with 0 being black and Maxval being white. Each gray value is represented in pure binary by either 1 or 2 bytes. If the Maxval is less than 256, it is 1 byte. Otherwise, it is 2 bytes. The most significant byte is first.

i dopiska na dole specyfikacji:

Compatibility napisał(a)
  • Before April 2000, a raw format PGM file could not have a maxval greater than 255. Hence, it could not have more than one byte per sample. Old programs may depend on this.

co oznacza, że do kwietnia 2000 r. każdy piksel opisany jest na jednym bajcie - po tej dacie tak jak napisałem wcześniej - jeżeli wartość koloru nie przekracza 255 - kolor opisany będzie jednym bajtem (typ Byte), w przeciwnym razie (czyli wartość od 256 do 65535) dwoma bajtami (typ Word); Zrozumiano...? Albo ta specyfikacja jest błędna, albo ja jestem ślepy...

Co prawda specyfikacja ta jest z 2003 roku, jednak na wikipedii artykuł o tym formacie jest sprzed kwietnia 2000 roku i jest napisane, że każdy piksel opisany jest na jednym bajcie; Skoro napisane jest jasno, że kolor może mieć wartość taką, jak typ Word stąd jasne jest, że grafika zapisana w tym formacie może byc 16-bitowa (lub skompresowana 8-bitowa);

1
kozi555 napisał(a):

w programie do Grafiki 3D renderuje sobie obraz formatu PNG - 16bit. Jest to jedyny format pliku 16bitowy czyli taki o jaki mi chodzi. No i teraz zaczyna się problem ponieważ z tego pliku potrzebuje wartości poszczególnych pikseli (będą to wartości z zakresu 0 - 65000 z kawałkiem . Chyba się nie myle ? Jak tak to mnie poprawcie ). @-123oho wspomniał iż istnieją biblioteki do wczytania pliku PNG do komponentu TImage i z tamtego komponentu będę mógł wyciągnąć te piksele (dalej mówimy tu o wartościach od 0 do 65000 z kawałkiem ) i wczytać je do tablicy dwuwymiarowej np 650 x 650 zgodnie z rozdzielczością obrazka ? Jeżeli tak to jestem w domu. I tak będę to próbował robić.

Komponent TImage służy do wyświetlania obrazów. Ty potrzebujesz co innego. Użyj bitmapy BMP. Jeśli program potrafi eksportować obrazy do PNG to do BMP też potrafi. W Delphi od zarania dziejów istnieje klasa która potrafi wczytać BMP umieszczając wszystkie piksele w tablicy, nazywa się TBitmap. Do odczytu konkretnych pikseli używa się metody ScanLine.

0

@adf88 : Masz racje render potrafi wyeksportować do BMP jednakże nie mogę wtedy zaznaczyć opcji 16 bitowej co jest w moim przypadku rzeczą konieczną... Chyba że może masz na to jakiś sposób ?

1

To użyj innego edytora, tym razem grafiki rastrowej, otwórz PNG i zapisz w formacie BMP 16bpp grayscale.

0
kozi555 napisał(a)

Masz racje render potrafi wyeksportować do BMP jednakże nie mogę wtedy zaznaczyć opcji 16 bitowej co jest w moim przypadku rzeczą konieczną...

Piszesz tak, jakbyś chciał zautomatyzować tworzenie tego obrazu (po zakończeniu renderowania Twój program automatycznie wykrywa plik i go otwiera); Ile masz tych grafik? W jaki posób chcesz wykorzystywać te pliki?

Jeśli musisz sobie tylko przygotować zestaw obrazów, które dopiero po skończeniu chcesz wykorzysatać w programie to oczywiste jest, że należy wyeksportować model do jakiegoś formatu pośredniego, a następnie otwierać wszystkie pliki w edytorze graficznym i zapisywać już we właściwym formacie; Wtedy będziesz miał elegancko przygotowane grafiki i nie będziesz musiał kombinować, czego jak na razie nie mogę zrozumieć; Chyba, że chcesz napisać program, który będzie Ci konwertował format pośredni do wynikowego, to już inna sprawa;

adf88 napisał(a)

Może Paint da radę?

Na WinXP jest słaby ten M$ Paint, obsługuje:

Nazwa filtru Głębia
Mapa bitowa monochromatyczna 1-bitowa
Mapa bitowa 16-kolorowa 4-bitowa
Mapa bitowa 256-kolorowa 8-bitowa
Mapa bitowa 24-bitowa 24-bitowa
Może na Win7 posiada więcej możliwości;
Patryk27 napisał(a)

O ile mi wiadomo, BMP można także animować. Inna sprawa, że nie spotkałem się z programem, który to obsługuje.

Owszem, można:

Wikipedia napisał(a)

Animowane bitmapy – powstają z cyklicznej podmiany kolorów w palecie, przykładem może być logo startowe systemu Windows. Animowane bitmapy można tworzyć dla obrazów 8-bitowych.

0

Dokładnie. Na razie strzelamy w ciemno. Jakbyś opisał ogólne ogólności byłoby łatwiej, co chcesz osiągnąć. Piszesz, że 16bpp grayscale jest jedynym dopuszczalnym formatem, ale dlaczego?

0
adf88 napisał(a)

Piszesz, że 16bpp grayscale jest jedynym dopuszczalnym formatem, ale dlaczego?

Mi się wydaje, że obrazy są w skali szarości i potrzebuje łatwo odczytać kolory poszczególnych pikseli (format PGM się nadaje do tego), przy czym obraz musi być dobrej jakości - stąd musi być z głębią 16-bitową;

0

To co chce osiągnąć to wczytać do programu obraz (uzyskany z rendera - PNG 16bit) i odczytać jasności każdego z pikseli (mogę użyć do tego jakichś innych programów które mi przetworza obraz do formatu wynikowego który będę mógł wczytać prosto w Delphi - w tym przypadku stanęło na BMP 16bit w skali szarości).

A dlatego musi być to obraz 16bitowy ponieważ potrzebuję dużą rozpiętość jasności poszczególnych pikseli

0
kozi555 napisał(a)

mogę użyć do tego jakichś innych programów które mi przetworza obraz do formatu wynikowego który będę mógł wczytać prosto w Delphi - w tym przypadku stanęło na BMP 16bit w skali szarości).

Dlaczego stanęło na BMP 16-bit w skali szarości? Czy ta skala szarości jest Ci potrzebna bo obraz jest w niej wykonany, czy może być kolor? Bo jeśli tak, to można przecież skorzystać z BMP 24-bit; Jeżeli koniecznie chcesz mieć skalę szarości i 16-bitową gamę to skorzystaj z *.pgm z tym, że albo zaopatrzysz się w dodatkową bibliotekę/rozszerzenie do kontrolki TImage albo ręcznie odczytuj linie z pliku i pakuj do np. TBitmap i wyświetlaj w komponencie;

Nie wiem dalej, czy chcesz tylko obrobić odpowiednio ten obraz, czy zależy Ci także na jego wyświetleniu w kontrolce TImage; Jeżeli nie chcesz go wyswietlać, to nie korzystaj z kontrolki, bo po co; Komponenty służą do przedstawiania użytkownikowi jakichś informacji, a nie do jej modyfikacji (było już nie raz to poruszane, jak ktoś pakował do TMemo tysiące linii tylko po to, by je jakoś tam pozmieniać co jest głupotą - traci się o wiele na szybkości, a zajętość pamięci wzrasta diametralnie);

kozi555 napisał(a)

A dlatego musi być to obraz 16bitowy ponieważ potrzebuję dużą rozpiętość jasności poszczególnych pikseli

16-bitowa grafika nie posiada znowu aż tak dużej rozpiętości, sam PNG może posiadać (z najwyższych głębi) 48-bitową dla RGB lub 64-bitową dla RGBA (z kanałem alfa) - to jest dopiero rozpiętość;

0

Tak zależy mi na wyświetleniu tego obrazu w komponencie. Bardzo chętnie bym skorzystał z 16bitowego formatu PGM tylko nie wiem w jaki sposób przerobić format PNG 16bit do PGM 16bit - nie znalazłem żadnego programu w sieci który by to umiał albo źle szukałem. Gdy wpakowałem PNG 16 bit do IrfanView i zapisałem jako PGM to zapisał mi on ten obraz jako 8-bitowy . Wartości poszczególnych pikseli były od 0-255.

0

Zainstalowałem bibliotekę TPNGImage i wczytałem obraz PNG 16 bitowy w ten sposób :
procedure TBRDFConv.btnWczytajClick(Sender: TObject);

 
var PNG: TPNGObject;
    BMP: TBitmap;
    TF : TextFile;
    f:pbytearray ;


begin
   OpenDialog1.Execute   ;
   PNG := TPNGObject.Create;
   BMP := TBitmap.Create;
   PNG.LoadFromFile(OpenDialog1.FileName);
   BMP.Assign(PNG);
   Image1.Picture.Bitmap := BMP;
   f:=bmp.scanline[0];
   f[0]:= f[0] - $F;
   BMP.Free;
   PNG.Free;
end;

Poodczytywałem sobie wartości paru pixeli z tego obrazu i dalej są to wartości z zakresu 0 -255... :/ Ktoś mi powie dlaczego tak się dzieje?

1

Przy konwersji do BMP tracisz 16bpp. Użyj Scanline i ExtraScanline na obiekcie TPNGObject.

0

Nie wiem, czy autor prawidłowo wykorzystuje metodę ScanLine;
Coś mi nie pasuje ta macierz f:pbytearray; i wywołanie funkcji f:=bmp.scanline[0];;

Sugerując się rozsądkiem i artykułem How to use ScanLine's z Embarcadero macierz nie powinna być typu Byte...

Jak się mylę to mnie poprawcie :]

1

W przykładzie jest tablica rekordów po 4 bajty (packed):

  TRGB32 = packed record
    B, G, R, A: Byte;
  end;

więc możemy jej używać również jak zwykłej tablicy bajtów.

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