amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Write/ReadPixelLine8 [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

12.12.2005, 11:09 Uhr

thomas
Posts: 7718
Nutzer
Zitat:
Mh, wie geht das? Bei Basic hatte ich da SYSTAB, damit
konnte ich höhe,breite und Tiefe der WB Abfragen.


code:
depth = GetBitMapAttr(win->RPort->BitMap,BMA_DEPTH);
if (depth > 8)
   {
   /* 24bit-Verarbeitung */
   }
else
   {
   /* 8bit-Verarbeitung */
   }


Zitat:
RECTFMT_RGB24 - geht das auch beim 16 Bit Schirm?

Ja, es wird automatisch umgerechnet.

Zitat:
Kannst du mir nicht ein beispiel geben? Nur eine Linie
von a nach b brauche ich.


Schau mal, ob da was dabei ist: http://thomas-rapp.homepage.t-online.de/examples/



Mask.c ist das einzige mit ReadPixelArray, das ich auf die Schnelle gefunden habe. Mal sehen, ich werde noch eins machen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 12.12.2005 um 11:10 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.12.2005, 11:51 Uhr

thomas
Posts: 7718
Nutzer
Hier ist ein größeres Beispiel:

code:
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <proto/cybergraphics.h>
#include <cybergraphx/cybergraphics.h>

struct Library *CyberGfxBase = NULL;


int main (void)

{
struct Window *win;
struct IntuiMessage *mess;
BOOL cont;
struct RastPort *srcrp;
struct RastPort *destrp;
long width = 160;
long height = 100;
UBYTE *array;
ULONG bpr; /* bytes per row */
long x,y;
UBYTE *xp,*yp;

CyberGfxBase = OpenLibrary ("cybergraphics.library",0);

if (win = OpenWindowTags (NULL,
		WA_Title,"pixarray",
		WA_Left,400,
		WA_Top,20,
		WA_Width,220,
		WA_Height,400,
		WA_Flags,WFLG_CLOSEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_ACTIVAT E|WFLG_NOCAREREFRESH,
		WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY,
		TAG_END))

	{

	srcrp = &win->WScreen->RastPort;
	destrp = win->RPort;

	if (GetBitMapAttr(srcrp->BitMap,BMA_DEPTH) > 8)
		{
		if (!CyberGfxBase)
			Printf ("cannot open cybergraphics.libraryn");
		else
			{
			bpr = width * 3;

			if (array = AllocVec (bpr * height,0))
				{
				ReadPixelArray (array,0,0,bpr,srcrp,20,20,width,height,RECTFMT_RGB);
				WritePixelArray (array,0,0,bpr,destrp,20,50,width,height,RECTFMT_RGB);

				yp = array;
				for (y = 0; y < height; y++)
					{
					xp = yp;
					for (x = 0; x < width; x++)
						{
						*xp++ ^= 255;
						*xp++ ^= 255;
						*xp++ ^= 255;
						}
					yp += bpr;
					}

				WritePixelArray (array,0,0,bpr,destrp,20,200,width,height,RECTFMT_RGB);

				FreeVec (array);
				}
			}
		}
	else
		{
		struct BitMap *tempbm;
		struct RastPort temprp;

		if (tempbm = AllocBitMap (width,1,8,0,NULL))
			{
			bpr = (width + 15) & ~15;

			if (array = AllocVec (bpr * height,0))
				{
				temprp = *srcrp;
				temprp.Layer = NULL;
				temprp.BitMap = tempbm;
				ReadPixelArray8 (srcrp,20,20,width + 19,height + 19,array,&temprp);
				temprp = *destrp;
				temprp.Layer = NULL;
				temprp.BitMap = tempbm;
				WritePixelArray8 (destrp,20,50,width + 19,height + 49,array,&temprp);

				yp = array;
				for (y = 0; y < height; y++)
					{
					xp = yp;
					for (x = 0; x < width; x++)
						{
						*xp++ ^= 255;
						}
					yp += bpr;
					}

				WritePixelArray8 (destrp,20,200,width + 19,height + 199,array,&temprp);

				FreeVec (array);
				}

			FreeBitMap (tempbm);
			}
		}

	cont = TRUE;
	do	{
		if (Wait ((1L << win->UserPort->mp_SigBit) | SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
			cont = FALSE;
		while (mess = (struct IntuiMessage *) GetMsg (win->UserPort))
			{
			switch (mess->Class)
				{
			case IDCMP_VANILLAKEY:
				if (mess->Code == 0x1b)
					cont = FALSE;
				break;
			case IDCMP_CLOSEWINDOW:
				cont = FALSE;
				break;
				}
			ReplyMsg ((struct Message *) mess);
			}
		}
	while (cont);

	CloseWindow (win);

	}

if (CyberGfxBase) CloseLibrary (CyberGfxBase);

return (0);
}



Es benutzt keine Linien, sondern Rechtecke, aber das sollte sich ja leicht anpassen lassen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/


[ Dieser Beitrag wurde von thomas am 12.12.2005 um 11:53 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.12.2005, 15:30 Uhr

MaikG
Posts: 5172
Nutzer
>Ist nicht böse gemeint, aber Du solltest erstmal lernen
>was struct bedeutet. Dann wirs Du feststellen, daß es
>screen Strukturen gibt, deren Komponenten die gewünschten
>Informationen enthalten.


Ich glaube die Basic bezeichnung von struct ist
TAGLIST.


Ich werde es mal mit dem Beispiel probieren.

[ - Antworten - Zitieren - Direktlink - ]

12.12.2005, 16:04 Uhr

gni
Posts: 1106
Nutzer
Zitat:
MaikG:
Ich glaube die Basic bezeichnung von struct ist TAGLIST.

Falsch :-(

[ - Antworten - Zitieren - Direktlink - ]

12.12.2005, 17:43 Uhr

Blackbird
Posts: 634
Nutzer
Zitat:
Original von MaikG:
>Ist nicht böse gemeint, aber Du solltest erstmal lernen
>was struct bedeutet. Dann wirs Du feststellen, daß es
>screen Strukturen gibt, deren Komponenten die gewünschten
>Informationen enthalten.


Ich glaube die Basic bezeichnung von struct ist
TAGLIST.


Ich werde es mal mit dem Beispiel probieren.


STRUCT bedeutet in Basic eher NEWTYPE


--

regards
Blackbird

Have a look at:
http://www.blackbird-net.de


Skins for PlayCD OS3.9
BlackShoot, Zombies Apocalypse, GalagaWars
PerfectPaint Catalogs

[ - Antworten - Zitieren - Direktlink - ]

13.12.2005, 09:21 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von MaikG:

Ich glaube die Basic bezeichnung von struct ist
TAGLIST.


Falsch.

Umgangssprachlich formuliert ist ein struct etwas, womit man mehrere Variablen (auch unterschiedlichen Typs) zusammenschnüren kann. Alles weitere erfährst Du z.B. in meinem C Kurs.


--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

13.12.2005, 09:59 Uhr

MaikG
Posts: 5172
Nutzer
>Umgangssprachlich formuliert ist ein struct etwas, womit
>man mehrere Variablen (auch unterschiedlichen Typs)
>zusammenschnüren kann. Alles weitere erfährst Du z.B. in
>meinem C Kurs.

Ich möchte sagen die formulierung passt auch auf Taglist.
Hab den Kurs noch nicht vollständig gedruckt...

[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Write/ReadPixelLine8 [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.