Newsgroup: it.comp.lang.visual-basic
Titolo: StretchBlt e Tile! (Non per tutti)

Salve a tutti!
Sto realizzando un controllo che contiene una picture QUADRATA. In questa
picture devo caricare una immagine (piu piccola rispetto alla picture) che
va ripetuta allinterno della picture in modo da riempirla tutta. La picture
puo variare le sue dimensioni quindi in fase di scrittura dell'immagine devo
effettuare un ridimensionamento nelle dovute proporzioni!
La cosa vorrei farla tramite l'API  StretchBlt. Qui viene il problema!
Come faccio a recuperare l'immagine da utilizzare nella chiamata all'API?
LoadPicture? e come devo utilizzarla nella chiamata? Ho  provato ma non esce
fuori nulla!
Posto un po di codice
On Error Resume Next
Dim pctScacchiera As New StdPicture
Dim lngRetValue As Long
Set pctScacchiera = LoadPicture(ImmagineScacchiera)
'Naturalmente nella chiamata successiva non faccio il tiling
'e solo una prova per vedere se funzionava la cosa
lngRetValue = StretchBlt(Scacchiera.hdc, 0, 0, (Scacchiera.Width / 4) /
Screen.TwipsPerPixelX, (Scacchiera.Height / 4) / Screen.TwipsPerPixelY,
pctScacchiera.Handle, 0, 0, (pctScacchiera.Width) / Screen.TwipsPerPixelX,
(pctScacchiera.Height) / Screen.TwipsPerPixelY, &HCC0020)
Per chi non l'avesse ancora capito devo realizzare una scacchiera! Devo
quindi caricare unimmagine costituita da due caselle 2x2 e riempire con
questa immagine la picture, ripeterla quindi 4 volte in orizzontale x 4
volte in verticale.
Qualcuno esperto di api?
DD
Ps. Luca ?? Ce stai!?!? Che mi dici???

 Salve a tutti!
tutti o non tutti ? deciditi ! :)

sotto c'e' codice per un tiling.
per lo stretch puoi anche semplificarti la vita con un image nascosto.
se lo fai una volta sola non rallenta tanto. diventa invece micidiale se
nel ciclo sotto inserisci una matrice di image.
ciao, a.
Public Sub TilePic()
    On Error GoTo errman
    Dim TileIt As Long
    Dim x As Integer, Y As Integer
    Dim MaxX As Integer, MaxY As Integer
    Dim TileW As Integer, TileH As Integer
    Dim NumOfImg As Integer
    With frmBack
        .picBacks.Cls
        .picSrc.Picture = LoadPicture(MyFile)
        TileW = .picSrc.Width \ SX
        TileH = .picSrc.Height \ SY
        MaxX = .picBacks.ScaleWidth \ SX
        MaxY = .picBacks.ScaleHeight \ SY
        For Y = 0 To MaxY Step TileH
            For x = 0 To MaxX Step TileW
                TileIt = BitBlt(.picBacks.hDC, x, Y, TileW, TileH,
.picSrc.hDC, 0, 0, SRCCOPY)
                NumOfImg = NumOfImg + 1
            Next
        Next
    End With
    Exit Sub
errman:    MsgBox Error
End Sub

errman:    MsgBox Error
E se invecie di di Erman si chiama Mark?
Ah, no... ho capito: č anglo-romano "err man" = l'uomo.
Beh, ma alla fine 'sto uomo come si chiama?
:)
Ciao

(pctScacchiera.Height) / Screen.TwipsPerPixelY, &HCC0020)
[snip]
ti stai complicando l' esistenza (anche perche' la StretchBlt non lavora
con l' handle di una IPictureDisp):
sostituisci la schiamata StretchBlt con il metodo PaintPicture della 
picturebox Scacchiera e tutto funzionera' come per magilla :-)
ciao, hal


magilla -gorilla???
ciao
ugo

 ha scritto nel messaggio
news:9erbfd$qd8s$1...@ID-56381.news.dfncis.de...


         TileH = .picSrc.Height \ SY
Mi sfugge qualcosa! SX e SY cosa sarebbero?


se mi dici che piuttosto veloce in caso di resize allora.....
PaintPicture cammina veloce, e' la StretchBlt applicata alla IPictureDisp.
Non so nel tuo caso, ma l' ho usata felicemente in parecchie occasioni
non banali.
ciao, hal

 Mi sfugge qualcosa! SX e SY cosa sarebbero?
screen.ecc.pix x e y
ciao, a.

se mi dici che piuttosto veloce in caso di resize allora.....
La PaintPicture è un wrap alla StretchBlt().
Anche i parametri sono gli stessi.
L'unica cosa in cui ci guadagni è la non dichiarazione dell'ape.
Ciao