Point(x,y)?
Point(x,y)?
Kann mir jemand sagen wie ich diese funktionon "Point" auf ein geladenes image über die loadImage Funktion anwende?
Oder gibt es eine schnellere Alternative?
Oder gibt es eine schnellere Alternative?
Danke Mark S.
Re: Point(x,y)?
MASH hat geschrieben:Kann mir jemand sagen wie ich diese funktionon "Point" auf ein geladenes image über die loadImage Funktion anwende?
Oder gibt es eine schnellere Alternative?
das müßte so gehen... mal eben hier ohne PB editor geschrieben....
loadimage(0,"name")
useimage(0)
startdrawing(imageoutput())
result = point(20,20) ;x,y, z.b. 20,20
stopdrawing()
in result steht dann der RGB wert... kannst mit RED GREEN BLUE die farben einzlen auswerten!
-
Hellhound66
- Beiträge: 476
- Registriert: 23.03.2005 23:19
Genau richtig.
Das ist allerdings eine extrem lahme Routine. Wenns schneller gehen soll, machs von Hand indem Du via GetDIBits_() die Pixelmap ausliest und darauf direkt zugreifst.
Zum Beispiel so:
So bekommst Du eine Kopie des Bildes nach *nBuf kopiert. Lohnt sich natürlich nur, wenn Du viele Punkte auslesen möchtest. Achte auch noch auf das Format beim Auslesen, also wieviel Bit pro Farbwert verwendet wurden.
Das ist allerdings eine extrem lahme Routine. Wenns schneller gehen soll, machs von Hand indem Du via GetDIBits_() die Pixelmap ausliest und darauf direkt zugreifst.
Zum Beispiel so:
Code: Alles auswählen
hbmp = LoadImage(1,File)
WIDTH = ImageWidth()
HEIGHT =ImageHeight()
Depth=ImageDepth()
*nBuf = AllocateMemory(WIDTH*HEIGHT*Depth/8)
hDC = StartDrawing(ImageOutput())
bmi.BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = WIDTH
bmi\bmiHeader\biHeight = HEIGHT
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = Depth
bmi\bmiHeader\biCompression = #BI_RGB
GetDIBits_(hDC,hbmp,0,HEIGHT,*nBuf,bmi,#DIB_RGB_COLORS)
StopDrawing()
Optimismus ist ein Mangel an Information.
RGB32 = rot+grün+blau+alpha
Im Speicher ists so angeordnet: BGRA+BGRA+BGRA .....
Somit "müsstest" du eine Peek-Schleife bauen.
Jeder "Zeilensprung" des Bildes wäre bei y=y*Width (so mal fix ausm Kopf).. (die Zeilenauslesung ist im ZigZack Verfahren).
Aber es gibt dafür auch einen direkten API Befehl der dies inne hat:
GetPixel_()
http://msdn.microsoft.com/library/defau ... s_0rho.asp
Nun weiss ich aber nicht, ob dieser ebenso lahm ist, wie der von Purebasic. Ansonsten suche nach PointFast() hier oder im engl. PB Forum.
Hmm .. so fix aus dem Kopf würde ich mal so rangehen:
Im Speicher ists so angeordnet: BGRA+BGRA+BGRA .....
Somit "müsstest" du eine Peek-Schleife bauen.
Jeder "Zeilensprung" des Bildes wäre bei y=y*Width (so mal fix ausm Kopf).. (die Zeilenauslesung ist im ZigZack Verfahren).
Aber es gibt dafür auch einen direkten API Befehl der dies inne hat:
GetPixel_()
http://msdn.microsoft.com/library/defau ... s_0rho.asp
Nun weiss ich aber nicht, ob dieser ebenso lahm ist, wie der von Purebasic. Ansonsten suche nach PointFast() hier oder im engl. PB Forum.
Hmm .. so fix aus dem Kopf würde ich mal so rangehen:
Code: Alles auswählen
Structure myRGB
r.l
g.l
b.l
EndStructure
loadimage(0,"name") ;// Ich denke mal so ists breits im Speicher??
useimage(0)
hdc = startdrawing(imageoutput())
result.myRGB = GetPixel_(hdc, 20, 20) ;x,y, z.b. 20,20
stopdrawing()
red = RGB\r
blue = RGB\g
green = RGB\bGenau, RGB32. Dann müsste deine Struktur aber auch 32 (bzw 24) bit groß sein und nicht 96 bitinc. hat geschrieben:RGB32 = rot+grün+blau+alpha
->
Code: Alles auswählen
Structure myRGB
r.b
g.b
b.b
EndStructure
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wie meinst du das?inc. hat geschrieben: (die Zeilenauslesung ist im ZigZack Verfahren).
afaik steht ne bitmap im speicher ähnlich wie ein 2D-Array.
*geistesblitz*
könnte ich nicht ein array einrichten, und dassen pointer auf die bitmap verbiegen,
um auf die farbwerte der pixel dann direkt aus dem array zuzugreifen?
...oder macht er das nicht, weil das außerhalb seines datensegmentes stünde...
(früher ging so was)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
@ Deeem2031
Yupp genau, ... so gehts wenn man fix ausm Kopf tippt.
genauso wie
red = RGB\r
blue = RGB\g
green = RGB\b
müsste imho lauten
result\r
result\g
result\b
Da ist trotzdem noch ein Bug drin.
"Can't assign a value to a structure" oder so hat der Debugger ausgespuckt.
Hmmm ...
@Kaeru Gaman
Array?
loadimage(0,"name") ; // Ich denke mal so ists breits im Speicher??
useimage(0)
startdrawing(imageoutput())
color = PointFast(x,y) ; // Aus der "E2D" User Library! Musst du mal hier suchen.
stopdrawing()
red = Red(color)
green = Green(color)
blue = Blue(color)
EDIT: PointFast() ist immer noch "unbeaten", selbst GetPixel_() aus der WinAPI ist grotten langsam muss ich feststellen.
Yupp genau, ... so gehts wenn man fix ausm Kopf tippt.
genauso wie
red = RGB\r
blue = RGB\g
green = RGB\b
müsste imho lauten
result\r
result\g
result\b
Da ist trotzdem noch ein Bug drin.
"Can't assign a value to a structure" oder so hat der Debugger ausgespuckt.
Hmmm ...
@Kaeru Gaman
Array?
loadimage(0,"name") ; // Ich denke mal so ists breits im Speicher??
useimage(0)
startdrawing(imageoutput())
color = PointFast(x,y) ; // Aus der "E2D" User Library! Musst du mal hier suchen.
stopdrawing()
red = Red(color)
green = Green(color)
blue = Blue(color)
EDIT: PointFast() ist immer noch "unbeaten", selbst GetPixel_() aus der WinAPI ist grotten langsam muss ich feststellen.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
yap, array...
wenn man ein array erzeugt, und dessen pointer auf die grafik verbiegt,
kann man durch zugriff auf die array-elemente direkt auf die grafik zugreifen.
...früher ging das jedenfalls, aber seit den 16bit zeiten hat sich einiges verändert in sachen zugriffsrechten...
wenn man ein array erzeugt, und dessen pointer auf die grafik verbiegt,
kann man durch zugriff auf die array-elemente direkt auf die grafik zugreifen.
...früher ging das jedenfalls, aber seit den 16bit zeiten hat sich einiges verändert in sachen zugriffsrechten...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.