| |
|
|
| Dank Sebastian [...] hier ein DrawPic-Nachbau zur Anwendung auf definierbaren DC: KompilierenMarkierenSeparieren
DrawPic_(long tDC,lBmp,nX,nY,nMode){
long hBitmap=lBmp
mem bm=BITMAP
getObject(hBitmap, sizeof(bm),bm)
int nCopyMode=srcCopy;
select nMode
caseOf 1: nCopyMode = SRCAND
caseOf 2: nCopyMode = SRCPAINT
caseOf 3: nCopyMode = SRCINVERT
caseOf 4: nCopyMode = DSTINVERT
otherWise
nCopyMode = SRCCOPY
endSelect
long hTempDC = CreateCompatibleDC(tDC)
long hOldBmp = SelectObject(hTempDC, hBitmap)
BitBlt(tDC, nX, nY, bm::bmWidth&, bm::bmHeight&, hTempDC, 0, 0, nCopyMode)
SelectObject(hTempDC, hOldBmp)
DeleteDC(hTempDC)
dispose bm
}
|
|
|
| |
|
|
|
| Und hier der Grund für den Nachbau - ein geclipptes drawPic: KompilierenMarkierenSeparieren
drawPicClipped(long tDC,lBmp,nX,nY,nMode,x,y,xx,yy){
long hBitmap=lBmp
add xx,x
add yy,y
mem bm=BITMAP
getObject(hBitmap, sizeof(bm),bm)
int nCopyMode=srcCopy;
select nMode
caseOf 1: nCopyMode = SRCAND
caseOf 2: nCopyMode = SRCPAINT
caseOf 3: nCopyMode = SRCINVERT
caseOf 4: nCopyMode = DSTINVERT
otherWise
nCopyMode = SRCCOPY
endSelect
long hTempDC = CreateCompatibleDC(tDC)
long hOldBmp = SelectObject(hTempDC, hBitmap)
BitBlt(tDC, x,y, xx-x, yy-y, hTempDC,x-nx,y-ny, nCopyMode)
//SelectObject(hTempDC, hOldBmp)
DeleteDC(hTempDC)
//Nachtrag:
//deleteObject hBitmap
//
dispose bm
}
Die letzten 4 Parameter geben einen Bereich auf den sich die Ausgabe beschränkt.
Somit kann ein großes Bild auf einen kleinen Ausschnitt gelegt werden ohne das mehr als der Ausschnitt tatsächlich überschrieben wird.
Der CopyModus wird hiebei jedoch (noch) nicht beachtet da der Inhalt des ZielDCs noch nicht beachtet wird. Bisher also nur srcCopy. |
|
|
| |
|
|
|
Frank Abbing | Am Ende nicht nur den DC, sondern auch die Bitmap wieder zerstören mittels DeleteObject. Und schön in dieser Reihenfolge. |
|
|
| |
|
|
|
| Kannst Du das einmal vormachen sodass es auch noch funktioniert? |
|
|
| |
|
|