atari-home.de - Foren

Software => Coding => Thema gestartet von: Count am Fr 06.02.2009, 18:03:42

Titel: Bildschirmbereiche kopieren
Beitrag von: Count am Fr 06.02.2009, 18:03:42
Hallo zusammen,
wer kann mir verraten, wie ich in C einen Bildschirmbereich von einer Stelle an eine andere kopieren kann?

Vielen Dank im Voraus!
Oliver
Titel: Re: Bildschirmbereiche kopieren
Beitrag von: afalc060 am Fr 06.02.2009, 18:21:43
vdi (http://www.mbernstein.de/atari/prog/tos/00700b.htm#vro_cpyfm)
Titel: Re: Bildschirmbereiche kopieren
Beitrag von: Count am Sa 07.02.2009, 15:36:07
Ja, genau die Funktion habe ich im Auge. Aber es funktioniert nicht. Irgendwie scheine ich doch was falsch zu machen:  :(

/* Bereich (100,100) bis (200,200) sichern */
MFDB* sicher = get_screen_content(vdi_handle, 100, 100, 200, 200);

...irgendwas machen...

/* Sicherung wieder herstellen */
put_screen_content(vdi_handle, 100, 100, sicher);
free(sicher);


MFDB* get_screen_content(VdiHdl handle, short x1, short y1, short x2, short y2) {
MFDB* src  = (MFDB*)malloc(sizeof(MFDB));
MFDB* dest = (MFDB*)malloc(sizeof(MFDB));

if (src && dest) {
short pxyarray[8];

src->fd_addr = dest->fd_addr = 0L;
pxyarray[0]  = pxyarray[4]   = x1;
pxyarray[1]  = pxyarray[5]   = y1;
pxyarray[2]  = pxyarray[6]   = x2;
pxyarray[3]  = pxyarray[7]   = y2;

vro_cpyfm(handle, S_ONLY, pxyarray, src, dest);

free(src);
}

return dest;
}


short put_screen_content(VdiHdl handle, short x, short y, MFDB* section) {
int   rc   = -1;

MFDB* src  = section;
MFDB* dest = (MFDB*)malloc(sizeof(MFDB));

if (src && dest) {
short pxyarray[8];

dest->fd_addr = 0L;
pxyarray[0] = pxyarray[4] = x;
pxyarray[1] = pxyarray[5] = y;
pxyarray[2] = pxyarray[6] = x + src->fd_w - 1;
pxyarray[3] = pxyarray[7] = y + src->fd_h - 1;

vro_cpyfm(handle, S_ONLY, pxyarray, src, dest);

free(src);

rc = 0;
}

if (dest) {
free(dest);
}

return rc;
}

Titel: Re: Bildschirmbereiche kopieren
Beitrag von: gstoll am Sa 07.02.2009, 16:20:48
Leer
Titel: Re: Bildschirmbereiche kopieren
Beitrag von: Count am Sa 07.02.2009, 19:19:33
Klingt einleuchtend. get_screen_content soll ja einen Bildschirmausschnitt sichern und put_screen_content den gesicherten Ausschnitt wieder ins Bild kopieren.

Ich habe mal testweise in get_screen_content einen anderen Zielbereich angegeben, den ich mit malloc(0xffff) reserviere:

statt
src->fd_addr = dest->fd_addr = 0L;

nun
src->fd_addr  = 0L; dest->fd_addr = malloc(0xffff);

Es passiert aber immer noch nichts.
Titel: Re: Bildschirmbereiche kopieren
Beitrag von: gstoll am So 08.02.2009, 16:30:21
Leer
Titel: Re: Bildschirmbereiche kopieren
Beitrag von: Count am Sa 14.02.2009, 15:37:38
leer