atarionline.pl ASCI Art - program "pod" zestaw znaków XL/XE - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1:
       
      CommentAuthorxeen
    • CommentTime23 Nov 2012 zmieniony
     
    Jest jakieś narzędzie, które konwertuje rysunki do ASCI przy wykorzystaniu standardowego zestawu znaków ATARI XL/XE (odpowiednio układa znaki aby było maksymalne przybliżenie oryginału)? Na sieci jest masa konwerterów pod peze, znalazłem jakiś pod ST.
    • 2: CommentAuthorwieczor
    • CommentTime23 Nov 2012
     
    Algorytm konwersji jest prosty - przygotowujesz obraz w odcieniach szarości (256, 8 bitów) o rozdzielczości którą masz w znakach (np. 40 x 20 - standardowy ekran tekstowy lub wiecej jak chcesz scrollować). Znaki z generatora sortujesz wg ilości zapalonych w każdym z nich pikseli - spacja to 0 i przypisujesz każdemu pikselowi odpowiedni znak - im jaśniejszy piksel tym znak o większej ilości pikseli. Można sobie i w Basicu zrobić ;)
    • 3:
       
      CommentAuthorxeen
    • CommentTime23 Nov 2012 zmieniony
     
    Nie jestem przekonany do tego algorytmu, wydaje mi się (intuicyjnie), że np szachownica z 50% zapalonych punktów to inny "kolor" niż trójkąt z 50% zapalonych punktów.
    Poza tym jednym znakiem "konsolidujesz" kilka odcieni szarości (konkretnie 8x8 jeżeli rodzielczośc w pixlach jest 320x192)
    • 4:
       
      CommentAuthorDracon
    • CommentTime23 Nov 2012
     
    Niech więc WieczÓr napisze taki programik, w końcu staje się forumowym specjalistą od (prawie) wszystkiego. ;)
    • 5: CommentAuthorwieczor
    • CommentTime23 Nov 2012
     
    Niepotrzebna złośliwość, ja JESTEM specjalistą od wszystkiego ;) No dobra, żarcik. Co do algorytmu, to kiedyś się z tym bawiłem i o ile faktycznie znak wygląda inaczej, to patrzenie na matrycę znaków już to niweluje - mózg sobie uśrednia.

    Co do integrowania kilku pikseli pod jednym to jest klasyczny rescale - piksele które mają się stać jednym się uśrednia :) Dlatego mówiłem o obrazie 40x24 a nie 320x192. To można sobie zrobić wcześniej dowolnym programem do rescalowania grafiki - on uśredni za Ciebie.

    Są bardziej zaawansowane algorytmy, uwzględniające faktyczną zawartość znaku (np. obliczające jasność dla jego ćwiartek - znak obejmuje wtedy 4 piksele) ale robi się to skomplikowane - trzeba szukać takich czwórek.

    Inne podejście to wyodrębnienie krawędzi na obrazku i użycie w ich miejscu konkretnych znaków semigrafiki zawierające przybliżenie tych kawałków linii. Efekt jest zarąbisty ale widziałem tylko jedną eksperymentalną implementację na PC, bo zagadnienie jest wtedy nietrywialne ;)

    Typowe ASCII arty są robione wg algorytmu o którym napisałem.
    • 6:
       
      CommentAuthorxeen
    • CommentTime23 Nov 2012 zmieniony
     
    wydaje mi się, że:
    do konwersji biorę hiresowy przeskalowany obrazek 320x192, czyli 40x24 znaki.
    Dla każdych 8x8 pixeli z obrazka dopasowuję znak w taki sposób aby jak najbardziej się pokrywał - chyba proste.
    Mam smaka any coś takiego napisać - oby nie skończyło się jak zwykle na gadaniu ;)

    no i g2f wypluwa znaki, które musze tylko porównać z std Atari - znaku po znaku. no taca, panie.
    • 7: CommentAuthorwieczor
    • CommentTime23 Nov 2012 zmieniony
     
    Ekhm... Wiesz - to prawie to samo , tylko że ja sprawdzam "pokrywanie" się bloku 8x8 ze znakiem na zasadzie - jasność bloku 8x8 (uśrednione 64 pixele) = ilość zapalonych pikseli w znaku :) To jest właśnie sprawdzanie "pokrywania" - naturalnie to najprostszy algorytm i powszechnie stosowany daje dobre efekty - jednakże rozumiem , że chcesz coś bardziej wyrafinowanego typu wykrywanie linii w znaku i na obrazie, ambitny plan, życzę powodzenia (oczywiście jest to możliwe ale jak już pisałem nie trywialne :) Acha - no i obraz z odcieni szarości trzeba wstępnie sprowadzić do 320x192 w dwóch kolorach - w zależności od grafiki i gustu z ditheringiem lub progowaniem. Pętla sprawdzająca będzie oczywiście cięższa gdyż musisz przyrównać każdy blok 8x8 do każdego ze znaków, nie mówiąc już o samym przyrównywaniu w każdym obiegu. Ja po prostu obliczam średnią jasność i wybieram najbliższy znak z tablicy.

    Ok, na Atari tego nie napiszę, za długo by to trwało - dawno nie pisałem. Ale napiszę w PHP przykład poglądowy o co mi chodzi - oczywiście z zestawem znaków Atari (już wyciąłem ;) )
    • 8:
       
      CommentAuthorxeen
    • CommentTime23 Nov 2012
     
    prawie :) kwestia doboru znaku bez uśredniania....