On Jul 21, 2006, at 12:55 PM, J. Landman Gay wrote:

I am trying to figure out how to set an image's imageData to a repeating pattern. I have a pattern that is 8 x 8 pixels. I want to repeat this pattern 16 times in order to fill a 32-pixel square image.

If I repeat the pattern 4 times, I get a nice column of four repeating patterns going down the left edge of the image. If I repeat it 16 times I get junk. In what order are the pixels laid down, and what determines where and when they wrap?

Jacque,

I need to experiment with this for a project I'm working on so I worked in this handler yesterday. You just provide the long id of a src image (the image to tile) and the destination image (the image to perform the tiling in). I've only tested this on OS X with Rev 2.7.x but it is working well here.

By the way, it seems that in 2.7.x that backgroundPatterns can be any size. There is a note in the What's New.txt file that says this is the case for graphics but I tried setting the backgroundPattern of a field to an image that was 405 x 29 and it appeared correctly on OS X. The pattern evens scrolls with the field which is cool. If backgroundPatterns behave like this on Windows as well then perhaps there is no need to roll your own tiling handler.

--
Trevor DeVore
Blue Mango Learning Systems - www.bluemangolearning.com
[EMAIL PROTECTED]




ON TileImage pSrcImg, pDestImg, pUseAlpha
    local pixelCharCount = 4

    put the width of pSrcImg into theSrcWidth
    put the height of pSrcImg into theSrcHeight

    put the width of pDestImg into theDestWidth
    put the height of pDestImg into theDestHeight

    put theDestWidth div theSrcWidth into theColumns
    put theDestHeight div theSrcHeight into theRows
    put theDestWidth mod theSrcWidth into theLeftOverWidth
    put theDestHeight mod theSrcHeight into theLeftOverHeight

    put pixelCharCount * theLeftOverWidth into theLastColCharCount
    put pixelCharCount * theLeftOverHeight into theLastRowCharCount
put theDestWidth * pixelCharCount into theRowWidthCharCount # number of image data chars in one row

put theRowWidthCharCount * theLastRowCharCount into theLastRowTotalImageCharCount # how many total pixels does last partial row take up? put theDestWidth * theLeftOverHeight into theLastRowTotalAlphaCharCount

    put the imagedata of pSrcImg into theImageData
    IF pUseAlpha THEN put the alphadata of pSrcImg into theAlphaData

    REPEAT with theRow = 1 to theSrcHeight      # cache one entire row
put (theRow - 1) * (theSrcWidth * 4) + 1 into theStartPixel # separate src image into rows
        put theStartPixel + (theSrcWidth * 4) - 1 into theEndPixel
put char theStartPixel to theEndPixel of theImageData into theRowImgDataA[theRow,"full"] put char 1 to theLastColCharCount of theRowImgDataA [theRow,"full"] into theRowImgDataA[theRow,"partial"] # partial column at right side of dest img

        IF pUseAlpha THEN       # same for alpha
            put (theRow - 1) * theSrcWidth into theStartPixel
            put theStartPixel + theSrcWidth into theEndPixel
put char theStartPixel to theEndPixel of theAlphaData into theRowAlphaDataA[theRow,"full"] put char 1 to theLastColCharCount of theAlphaData into theRowAlphaDataA[theRow,"partial"]
        END IF

REPEAT with theCol = 1 to theColumns # insert src row into each column for dest row
            put theRowImgDataA[theRow,"full"] after theRowImageData
IF pUseAlpha THEN put theRowAlphaDataA[theRow,"full"] after theRowAlphaData
        END REPEAT
        IF theLeftOverWidth > 0 THEN
            put theRowImgDataA[theRow,"partial"] after theRowImageData
IF pUseAlpha THEN put theRowAlphaDataA[theRow,"partial"] after theRowAlphaData
        END IF
    END REPEAT

    lock screen
    IF theRows > 1 THEN      # tile rows if need be
        REPEAT with theRow = 1 to theRows
            put theRowImageData after theNewImageData
            IF pUseAlpha THEN put theRowAlphaData after theNewAlphaData
        END REPEAT

        IF theLeftOverHeight > 0 THEN
put char 1 to theLastRowTotalImageCharCount of theRowImageData after theNewImageData # fill in the last row
            IF pUseAlpha THEN
put char 1 to theLastRowTotalAlphaCharCount of theRowAlphaData after theNewAlphaData
            END IF
        END IF

        set the imagedata of pDestImg to theNewImageData
        IF pUseAlpha THEN
            set the alphadata of pDestImg to theNewAlphaData
        END IF
    ELSE        # we have all data we need for single row
        IF theLeftOverHeight > 0 THEN
put char 1 to theLastRowTotalImageCharCount of theRowImageData after theRowImageData # fill in the last row
            IF pUseAlpha THEN
put char 1 to theLastRowTotalAlphaCharCount of theRowAlphaData after theRowAlphaData
            END IF
        END IF

        set the imagedata of pDestImg to theRowImageData
        IF pUseAlpha THEN
            set the alphadata of pDestImg to theRowAlphaData
        END IF
    END IF
    unlock screen
END TileImage




_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to