| |
|
|
| Möchte vom ScreenHandle "hWin& = @Create("text", %hWnd, "Test1", 10, 10, 400,400)" ein Ausschnitt ab x=200, y=200 mit der Breite=128 und Höhe=128 schnellstmöglich in einem mit "Create" erstellten Bildhandle& kopieren zur Auswertung.
mfg peter |
|
|
| |
|
|
|
Rolf Koch | ??? Hallo Peter, die Frage hast Du doch schon hier gestellt: [...] und was iF dort mit der Signatur meinte: [...] |
|
|
| |
|
|
|
Jörg Sellmeyer | Na, das mit der Signatur hat er jetzt ja. Hat Dir denn iFs Antwort nicht weitergeholfen? Ich hab noch nicht ganz verstanden, was Du willst. Hier mal schematisch KompilierenMarkierenSeparierenCls
Var txt& = Create("Text",%hwnd,"Test",10,10,400,400)
MCLS 128,128
MCopyBmp (10 + 200), (10 + 200) - 0,0,0
Var hBmp& = Create("hPic",0,"&MEMBMP")/pre>
"&MEMBMP" - Es wird eine Bitmapkopie mit der aktuellen mit MCLS oder MLOADBMP erzeugten Speicherbitmap erstellt.
ist jetzt allerdings nicht getestet, sondern nur so zusammengeschrieben. Hilft Dir das erstmal weiter? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.08.2008 ▲ |
|
|
|
|
| Jup, danke Jörg.
Man darf nicht soweit denken.
Der Bildschirmausschnitt der beginnend bei X1,Y1 eine Breite von X2 Pixel und eine Höhe von Y2 Pixel hat, wird aus dem mit MLoadBmp geladenem Bild an die Position X3,Y3 kopiert.
Hier hatte ich mich festgebissen in der Beschreibung "...an die Position X3,Y3 kopiert.....", das diese Copy nur auf den sichtbaren Fenster copiert wird und nicht in inem Handle reingepackt werden kann.
Moin Rolf, ich begrüsse dich.
mfg peter |
|
|
| |
|
|
|
| Nie aufgeben Peter ! War ein schweres unterfangen.
Jetzt klappt es, einen beliebigen Bildauschnitt 128X128 Pixel im laufenden Programmablauf vom Fenster auf der linken Seite mit BitBlt in un DIB zu bringen und dann die Bereichsvariable auslesen(wird hier nicht durchgeführt das Auslesen). In der While-loop wird als Beispiel mit BitBlt in die DC-idc& der iBitmap&, der Grafikbereich eingelesen, (ohne Umwandlung in un DC geht es nicht). Mit GetDiBits wird die iBitmap&(jetzt nicht die DC) in die Bereichsvariable gelesen. Und mit SetDIBitsToDevice kann man auch direkt die Bereichsvariable von XProfan auf das Fenster bringen als Bild, ohne dies umzuwandeln. Wird auf der rechten Seite dargestellt. Die Geschwindigkeit per die 3 Befehle in der Schleife per einen Durchgang knapp 4ms und per die ersten 2 Befehle, die ich nur brauche, ohne Bilddarstellung sind es 1ms
Hat einen grossen Lerneffekt gehabt mit den API-Befehlen.
mfg peter KompilierenMarkierenSeparieren $H Windows.ph
Window 20,20-800,600
Cls @RGB(220,220,220)
var hWin& = @Create("text", %hWnd, "Test0", 10, 10, 600,400)
declare bmi#
declare bild#
dim bild#,128*128*4
var width%=128
var height%=128
bitmap_header()
startpaint hWin&
loadbmp "tile1.bmp",0,0,0
endpaint
var hdc&=~GetDC(hWin&)
var iDC&=~CreateCompatibleDC(hDC&)
var iBitmap& = ~CreateDIBSection(idc&, bmi#, ~DIB_RGB_COLORS, 0,0,0)
~SelectObject(iDC&, iBitmap&)
whileloop 0,120,1
~Bitblt(idc&,0,0,128,128,hdc&,0+&loop,0+&loop,~SRCCOPY)
~GetDIBits(hdc&,iBitmap&,0,128,bild#,bmi#,~DIB_RGB_COLORS)
~SetDIBitsToDevice(hdc&, 350, 0, width%, height%, 0, 0, 0, 128, bild#,bmi#, ~DIB_RGB_COLORS)
sleep 1
endwhile
waitkey
end
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER =
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = width%
.biHeight& = height%
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
endproc
|
|
|
| |
|
|
|
| Deshalb auch mit XProfan11 (zum Glück) deutlich vereinfacht da man beliebige hPics beziehen kann. |
|
|
| |
|
|
|
| Diese 3 Befehle ersetzen quasi den von dir erwähnten : KompilierenMarkierenSeparieren Für den GetDibits und SetDIBitsToDevice finde ich keine schnellere Lösung als XProfanbefehl.
Auf gehts...., zum nächsten Erfolg. Nicht müde werden. Habe schon viel gelernt.
mfg peter |
|
|
| |
|
|
|
| Wenn dieser Befehl von XProfan11 : bitmaphandle& = create("hPicCopy", hPic&[, x%, y%, dx%, dy%]) auch eine direkte Kopie vom ablaufenden Fenster machen kann, dann ist es ein schöner Fortschritt oder man dann auch mehrere MCLS anlegen kann zum schnellen zwischenspeichern.
mfg peter |
|
|
| |
|
|
|
| Deshalb geht ja auch sowas: [...] |
|
|
| |
|
|
|
| Irgendwann wenn Roland aus dem Urlaub ist, wollte er meinen Antrag auf XProfan11 bearbeiten. Läuft schon.
mfg peter |
|
|
| |
|
|