atari-home.de - Foren
Software => Coding => Thema gestartet 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
-
vdi (http://www.mbernstein.de/atari/prog/tos/00700b.htm#vro_cpyfm)
-
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;
}
-
Leer
-
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.
-
Leer
-
leer