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 20:06 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 21:06
       
      DPEEK(88) - adres początku ekranu
      PEEK(106)*256 - adres końca ekranu
      • 3: CommentAuthorpin
      • CommentTime16 Jun 2017 22:06
       
      Kris - zamiast zadawać pytania bez sensu wpadnij jutro na kwadrat albo zadzwoń, zanim napiszesz posta :)
      • 4:
         
        CommentAuthorkris3d
      • CommentTime16 Jun 2017 23:06
       
      Pin, napisz, skorzysta więcej osób:)
      • 5:
         
        CommentAuthorkris3d
      • CommentTime16 Jun 2017 23:06
       
      @mono,dzieki ale ja jestem cienki w programowaniu czegokolwiek, wiec mniej niż więcej rozumiem co napisałeś;)
      • 6:
         
        CommentAuthormiker
      • CommentTime16 Jun 2017 23:06
       
      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 10:06
       
      @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 01:06
       
      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 05:06
       
      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 10:06 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 13:06
       
      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 16:06 zmieniony
       
      Pliki pbm mają nagłówek, zapisuje go linia 20, program Mikera zapisuje bez nagłówka.
      • 13: CommentAuthorpin
      • CommentTime20 Jun 2017 21:06
       
      a po co pbm? - zrzut całego ekranu tekstowego do pliku poprzez np. BPUT to ułamek sekundy.
      • 14:
         
        CommentAuthorkris3d
      • CommentTime20 Jun 2017 22:06
       
      @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 22:06
       
      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 23:06
       
      @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 23:06
       
      aaa - rozumiem. Tzn, nie masz Atari? ;)
      • 18:
         
        CommentAuthorkris3d
      • CommentTime22 Jun 2017 00:06
       
      A co ja jestem rolnikiem?;)