| |
|
|
Pedro Miguel | Hallo, Möchte ein gefüllten kreis zeichnen um ein Led zu simulieren. Eine graphic einlesen dauert zu lange.
Hintergrund: Aus der seriellen schnitstellen bekomme ich statusbits die ich als ON / OFF anzeigen möchte. Deswegen soll das zeichnen des Kreis sehr schnell vorgehen. Denn einmal soll ein ungefüllten kreis und sehr kurz darauf kann eventuell ein gefüllten Kreis erscheinen müssen. Weiss jemand wie das am besten zu machen ist?
Gruss Pedro |
|
|
| |
|
|
|
| Schnellste weg ist per GDI in ein hPic zeichnen z.B. mit der ellipse-Funktion und
dann konvertierst einfach z.B. die hPic-Pixel in einen Pixelspeicher und voila.
Aus der hPic.inc um die hPic -Pixel als Speicherpixel/ String zu erhalten:
string hPic.bgr2String(long h,_width,_height){
long sz=( (_width*32\8-1) | 3 +1) * abs(_height)
mem mem=bitmapInfoHeader
with mem
.biSize& = sizeof(mem)
.biWidth& = _width
.biHeight& = _height
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = BI_RGB
.biSizeImage& = sz
endwith
mem data=sz
string ret=""
case ~getDIBits(hDC,h,,_height,data,mem,) : ret=char$(data,,sz)
dispose data
dispose mem
return ret
}
Wenn Du den Kreis aber wirklich selbst rechnen magst dann einfach mal die
Funktion getCircP anschauen: [...] |
|
|
| |
|
|
|
Pedro Miguel | Hallo,
Vielen Dank für Deine Hilfe, aber verstehe den code nicht um es anzuwenden. Bin noch nicht sehr fortgeschritten in Xprofan.
Ist die Farbe wählbar mit der der Kreis gefüllt werden soll?
Wie rufe ich diesen code aus?
cls ... ...
Gruss Pedro |
|
|
| |
|
|
|
| Grüße!
Zeichne einfach einen Kreis mittels den XProfan-Möglichkeiten per usePen; useBrush
und ellipse am besten in ein hPic (create("hNewPic"...).
So kannst Du Farben samt Füllung bestimmen.
Die Funktion oben ist fortgeschrittenes XProfan im Einsatz mit dem Prä-
komilierer und kann damit so wie sie ist ausgeführt werden und erwartet als Parameter
ein hPic-Handle und die Bildausmaße des hPics und liefert eine Zeichenkette zurück
die die Pixel-Farbinformationen als Kette beinhaltet. Solltest Du den Präkompi
nicht im Einsatz haben dann schreibe ich Dir diese Funktion auch um. |
|
|
| |
|
|
|
Pedro Miguel | Hallo iF,
Solltest Du den Präkompi nicht im Einsatz haben dann schreibe ich Dir diese Funktion auch um.
Fals es nicht alzu viel Zeit ist, wäre ich danbar für die Funktion. Vielleicht verstehe ich es dann. Frank hat schon was gepostet was unter Umstände nutzbar ist, bin aber gespannt auf deine Lösung
Gruss Pedro |
|
|
| |
|
|
|
| Ich muss gestehen Deine Frage jetzt erst richtig verstanden zu haben - ich verstehe zur Zeit wohl nur "Bahnhof".
Zum Thema:
Meiner Meinung nach gehts am schnellsten mit rein XProfan, wenn Du die LED-Bilder bereits in einem hPic gespeichert hast. Also die Bilder einmal mit create("hPic",... einladen.
Dann erzeugst Du Bitmap-Statics mit create("bitmap",...und wenn Du die Grafik eines Bitmap-Static ändern möchtest dann nutzt einfach diese Nachricht: sendMessage(bitMapControl,370,0,hPic) // stm_setImage um dem Bitmap-Static ein anderes hPic (anderes LED-Bild) zuzuweisen.
Die von Frank beschriebene Methode ist im Gegensatz zu dieser Bitmap-Static-Methode nur für das hWnd geeignet und Du müsstest auch beachten, dass Du eben nicht nur auf das hDC kopierst, sondern zusätzlich auch auf das hDC2.
Diese Bitmap-Static-Methode erspart Dir jedoch auf allenFestern/ Dialogen manuelles Neuzeichen und dürfte dank der Tatsache das Du mit einem einzigen SendMessage das hPic ändern kannst in der Anwendung am einfachsten sein. |
|
|
| |
|
|
|
| Hier ein vollständiger Quelltext hübsch blinkender LEDs:
Herunterladen externer Download
cls
var orangeLEDBild&=create("hPic",-1,"orange.png")
var gruenLEDBild&=create("hPic",-1,"grün.png")
var cyanLEDBild&=create("hPic",-1,"cyan.png")
var ausLEDBild&=create("hPic",-1,"aus.png")
//
var orangeLEDBitmap&=create("bitmap",%hWnd,orangeLEDBild&,30,30)
var gruenLEDBitmap&=create("bitmap",%hWnd,gruenLEDBild&,50,30)
var cyanLEDBitmap&=create("bitmap",%hWnd,cyanLEDBild&,70,30)
while 1
waitinput 50
if rnd(2)
sendMessage(orangeLEDBitmap&,370,0,orangeLEDBild&)
else
sendMessage(orangeLEDBitmap&,370,0,ausLEDBild&)
endif
if rnd(2)
sendMessage(gruenLEDBitmap&,370,0,gruenLEDBild&)
else
sendMessage(gruenLEDBitmap&,370,0,ausLEDBild&)
endif
if rnd(2)
sendMessage(cyanLEDBitmap&,370,0,cyanLEDBild&)
else
sendMessage(cyanLEDBitmap&,370,0,ausLEDBild&)
endif
wend
end
Sieht aus wie bei einem "Modem". |
|
|
| |
|
|
|
Pedro Miguel | Hallo iF,
Vielen Dank. Ich wusste das Du etwas Tolles zauberst. Sehr gut und einfach zu verstehen. Gut das Xprofan und Dich gibt.
Gruss Pedro |
|
|
| |
|
|