Italia
Foro

Grafikfrage des Tages ...

 
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
 
25.08.2008  
 




Rolf
Koch
??? Hallo Peter, die Frage hast Du doch schon hier gestellt: [...] 
und was iF dort mit der Signatur meinte: [...] 
 
25.08.2008  
 




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
KompilierenMarkierenSeparieren
Cls
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
 
26.08.2008  
 



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


4 kB
Hochgeladen:27.08.2008
Downloadcounter60
Download
 
27.08.2008  
 



Deshalb auch mit XProfan11 (zum Glück) deutlich vereinfacht da man beliebige hPics beziehen kann.
 
27.08.2008  
 



Diese 3 Befehle ersetzen quasi den von dir erwähnten :
KompilierenMarkierenSeparieren
var hdc&=~GetDC(hWin&)
va r iDC&=~CreateCompatibleDC(h DC&)
var iBitmap& = ~CreateDIBSection(idc&, bmi#, ~DIB_RGB_COLORS, 0,0,0)re>

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
 
27.08.2008  
 



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
 
27.08.2008  
 



Deshalb geht ja auch sowas: [...] 
 
27.08.2008  
 



Irgendwann wenn Roland aus dem Urlaub ist, wollte er meinen Antrag auf XProfan11 bearbeiten.
Läuft schon.

mfg
peter
 
28.08.2008  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.051 Views

Untitledvor 0 min.

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie