atarionline.pl Turbo Basic XL - zapis ekranu do pliku graficznego - 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:
       
      CommentAuthorkris3d
    • CommentTime16 Jun 2017 zmieniony
     
    W jaki sposób zapisać zawartość ekranu prosto do pliku graficznego? Albo na ekran a później do pliku graficznego (bitmapa?)

    W skrócie chodzi mino coś takiego:
    1. Generuje obraz na ekran w różnych trybach graficznych i na różne sposoby: raz jest to zestaw znaków a innym razem rysowanie PL/DR lub znaki w trybie graficznym.

    2. To co zostanie wyrzucone na ekran chce zapisać do pliku graficznego tak żeby dało się to jakoś później odczytać, najlepiej w formacie bitmapy.

    3. Zapis do pliku pewnie dosowy najlepiej na dyskietkę.

    Pytanie: da się coś takiego zrobic uniwersalnie niezależnie od trybu bez kombinowania w asemblerze?

    W druga stronę z obrazka na ekran potrafię:)
    Rozwiązanie typu print screen w emulatorze znam:)
    • 2: CommentAuthormono
    • CommentTime16 Jun 2017
     
    DPEEK(88) - adres początku ekranu
    PEEK(106)*256 - adres końca ekranu
    • 3: CommentAuthorpin
    • CommentTime16 Jun 2017
     
    Kris - zamiast zadawać pytania bez sensu wpadnij jutro na kwadrat albo zadzwoń, zanim napiszesz posta :)
    • 4:
       
      CommentAuthorkris3d
    • CommentTime16 Jun 2017
     
    Pin, napisz, skorzysta więcej osób:)
    • 5:
       
      CommentAuthorkris3d
    • CommentTime16 Jun 2017
     
    @mono,dzieki ale ja jestem cienki w programowaniu czegokolwiek, wiec mniej niż więcej rozumiem co napisałeś;)
    • 6:
       
      CommentAuthormiker
    • CommentTime16 Jun 2017
     
    Taki podprogramik - można go zapisać przez LIST i dograć przez ENTER do innego lub używać jako saoistny:

    32760 OPEN #CHNL,8,0,"D:MYPIC.DAT"
    32761 BPUT #CHNL,DPEEK(88),ILE
    32762 CLOSE #CHNL

    gdzie podstawiasz pod:
    - CHNL - nr kanału SIO, zwykle 1 (może bodajże do 5, ale sprawdź)
    - ILE - ilość bajtów do zapisu do pliku (np. dla trybów 8 i 15 cały ekran ma 7680 bajtów)

    Poza tym możesz po DPEEK(88) dodać jakąś liczbę - wtedy możesz zgrać od zgrywasz od innego adresu ekranu - pokombinuj, np. DPEEK(88)+40 zgrywasz od linii niżej (przy standardowej szerokości ekranu).

    Cała filozofia. :)
    • 7:
       
      CommentAuthorkris3d
    • CommentTime17 Jun 2017
     
    @miker, dzięki! O to mi chodziło:) będę kombinował, a jak sie uda dam znać o co mi chodziło;)
    • 8:
       
      CommentAuthorkris3d
    • CommentTime20 Jun 2017
     
    Udało mi się zrobić zapis ekranu pod TBXL do pliku, ale to co się do niego zapisuje to w trybach tekstowych dla mnie czarna magia:)

    Tryby graficzne jeszcze jako tako wyglądają ale tekstowe zapisują się jako śmietnik:)

    Pliki otwiera G2F w takiej postaci jak widać na obrazku (porównanie ekranu z emulatora i zrzut do pliku otwartego w G2F). Zapisuję za dużo danych ale i tak te na początku nie przypominają oryginału:)

    Jest jakaś szansa żeby prawidłowo zapisać wygenerowany obraz w trybie tekstowym do pliku? zależy mi również na zrzutach z trybu znakowego nie tylko GR.0 ale też 2 i 3
    • 9: CommentAuthorantrykot
    • CommentTime20 Jun 2017
     
    10 OPEN #1,8,0,"H:SCREEN.PBM"
    20 ? #1;"P4";CHR$(10);320;CHR$(10);192;CHR$(10);
    30 S=DPEEK(88):CHS=256*PEEK(756)
    40 FOR Y=0 TO 23:FOR I=0 TO 7
    60 FOR X=S TO S+39:M=(PEEK(X)>127)*255:PUT #1,PEEK(CHS+8*PEEK(X)&127+I) EXOR M:NEXT X
    70 NEXT I:S=S+40:NEXT Y
    80 CLOSE #1


    To zapisuje GR.0 w formacie portable bitmap. Jest to strasznie wolne, nawet jak naciskam F1 w emulatorze to i tak muszę długo czekać.
    • 10: CommentAuthorpirx
    • CommentTime20 Jun 2017 zmieniony
     
    to się pewnie da nieco zoptymalizować, może nawet nieźle jeśli na ekranie dominuje jakiś znak, np. spacja (if spacja then sraj zerami), ale generalnie algorytm jest OK.
    trudniejsza optymalizacja, ale pewnie z 8 x przyśpieszy: - bufor na 40*8 bajtów, zamiana kolejności pętli I i X, tworzenie tymczasowej kopii bitowej zawartości ekranu, zgrywanie całego bufora na raz. jakby umieścić bufor w zmiennej tekstowej i zapisywać printem, to może byłoby jeszcze szybciej?

    Poza robieniem screena w emulcu pomoże też przepisanie tej procki na język maszynowy.
    • 11:
       
      CommentAuthorkris3d
    • CommentTime20 Jun 2017
     
    Dzięki za programik! będę próbował:) Na prędkości mi nie zależy, ot taki projekt:)

    PYTANIE: co determinuje (która część programu) zapis do formatu PBM? Czy jest w tym pliku jakiś nagłówek?

    Czy programik wrzucony przez Mikera też zapisuje PBM? Z góry sorry za pytania, ale w tym temacie jestem zielony;)

    P.S. Jakimś sposobem w TBXL jest wyrzucenie znaków na ekran w trybie graficznym instrukcją: TEXT X,Y,"TEXT" i zapis jak podał Miker:) Do moich celów wystarczy ale nie jest zbyt eleganckie:)

    @pirx, bardzo chętnie taki kodzik wyrzucony do Basica przytulę, niestety w maszynówce jestem na poziomie nie poczętego dziecka;)
    • 12: CommentAuthorantrykot
    • CommentTime20 Jun 2017 zmieniony
     
    Pliki pbm mają nagłówek, zapisuje go linia 20, program Mikera zapisuje bez nagłówka.
    • 13: CommentAuthorpin
    • CommentTime20 Jun 2017
     
    a po co pbm? - zrzut całego ekranu tekstowego do pliku poprzez np. BPUT to ułamek sekundy.
    • 14:
       
      CommentAuthorkris3d
    • CommentTime20 Jun 2017
     
    @antrykot, dzięki:)
    @pin, podaj przykład, bo ten od Mikera zapisuje to co widzisz w załączniku.

    Jeśli BPUT-em zapiszesz ekran w trybie znakowym w ciągu kilku sekund (na dyskietkę nie na hdd!) do pliku który da się otworzyć w jakimś viewerze to dawaj tutaj programik:) jak mówię na czasie mi nie zależy;)

    PS. Nie mam srATARI wiec niestety musisz trzymać stock-standard, takie jest założenie projektu: małe Atari z sio2PC:) Błagam, tylko bez wycieczek i trollollollo:)
    • 15: CommentAuthorpin
    • CommentTime20 Jun 2017
     
    Przykład, może pokrętny ale prosty:

    100 GRAPHICS %0:POKE 710,%0:POKE 82,%1:POKE 752,%1
    110 AD=DPEEK(88)
    120 EXEC BZDET:EXEC SAVE_SCR
    130 FOR B=%0 TO 20:EXEC LOAD_SCR:? :NEXT B:? :? "Klepnij cos, ale nie konia"
    514 GET KEY:GRAPHICS %0:END
    515 ------------------------------
    520 PROC SAVE_SCR:OPEN #%1,8,%0,"D:SCR.DAT":BPUT #%1,AD,992:CLOSE #%1:ENDPROC
    530 PROC LOAD_SCR:OPEN #%1,4,%0,"D:SCR.DAT":CLOSE #%1:ENDPROC
    540 PROC BZDET:FOR A=%0 TO 11:? "X X X X X X X X X X X X X X X X X X X":? " X X X X X X X X X X X X X X X X X X X"
    550 NEXT A:ENDPROC
    • 16:
       
      CommentAuthorkris3d
    • CommentTime20 Jun 2017
     
    @pin, to jest to samo co napisał Miker, zapisuje ale mi się nie udało otworzyć obrazu zgodnego z tym co było na ekranie, czyli żeby było widać znaki.

    Potrzebuje otworzyć taki obrazek na PCcie No i tu jest problem:)
    • 17: CommentAuthorpin
    • CommentTime20 Jun 2017
     
    aaa - rozumiem. Tzn, nie masz Atari? ;)
    • 18:
       
      CommentAuthorkris3d
    • CommentTime22 Jun 2017
     
    A co ja jestem rolnikiem?;)