簡體   English   中英

使用指定矩形在CATiledLayer中繪制圖像

[英]Draw image in CATiledLayer with given rect

我正在嘗試將圖像繪制到CATiledLayer中,並且切片尺寸為512x512。 唯一的問題是,最后的圖塊在較小的圖塊中變得越來越小。 提供的圖像寬度和高度不是512的倍數。因此,使其變為512的倍數所需的其余部分用黑色填充填充。

怎么看 我需要什么

我的繪畫代碼:

CGContextRef context = UIGraphicsGetCurrentContext();

CGFloat _scaleX = CGContextGetCTM(context).a;
CGFloat _scaleY = CGContextGetCTM(context).d;

CATiledLayer *tiledLayer = (CATiledLayer *) [self layer];
CGSize tileSize = tiledLayer.tileSize;
tileSize.width /= _scaleX;
tileSize.height /= -_scaleY;

NSInteger firstCol = floor(CGRectGetMinX(rect) / tileSize.width);
NSInteger lastCol = floor((CGRectGetMaxX(rect) - 1) / tileSize.width);
NSInteger firstRow = floorf(CGRectGetMinY(rect) / tileSize.height);
NSInteger lastRow = floorf((CGRectGetMaxY(rect) - 1) / tileSize.height);

NSInteger level = self.maxLevelOfDetail + roundf(log2f(_scaleX));
_currentZoomLevel = level;

for (NSInteger row = firstRow; row <= lastRow; row++) {
    for (NSInteger col = firstCol; col <= lastCol; col++) {
        CGRect tileRect = CGRectMake(tileSize.width * col, tileSize.height * row, tileSize.width, tileSize.height);
        UIImage *tileImage = [self.dataSource tiledImageView:self imageTileForLevel:level x:col y:row];
        Tile *tile = [self.tileCache objectForKey:tileCacheKey];
        [tile drawInRect:tile.tileRect blendMode:kCGBlendModeNormal alpha:1];
    }
}

我通過刪除一行來解決此問題。 其中結合了兩個直腸。

tileRect = CGRectIntersection(self.bounds, tileRect);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM