【问题标题】:Draw image in CATiledLayer with given rect使用给定的矩形在 CATiledLayer 中绘制图像
【发布时间】:2017-10-05 12:41:40
【问题描述】:

我正在尝试在 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];
    }
}

【问题讨论】:

    标签: ios objective-c calayer catiledlayer


    【解决方案1】:

    我通过删除一行来解决这个问题。其中结合了两个矩形。

    tileRect = CGRectIntersection(self.bounds, tileRect);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多