とてもニッチな内容の質問だと思うのですが、よろしくお願いします。
ゴールとしましては、白黒のランダムドット画像を、あらゆる画像サイズで同じドットのサイズで作りたいです。
![
現状は、下図のように、小さい画像のドットが細かくなっています。
(大きい画像の中央に小さい画像を配置しています)
実装の方針としましては、ビット配列からCGImageを作り、それをUIImageに変換して表示しています。
下記の関数でCGImageからUIImageを作っています。imageBytesはUInt8のビット配列で0または255の値を持っています。(ColorSpaceGrayなので、白黒が表示される)
objectivec
1- (UIImage *)imageWithBitmapBytes:(Byte *)imageBytes width:(size_t)width height:(size_t)height componentCount:(NSUInteger)componentCount { 2 // bitmap size 3 NSUInteger imageBufferSize = width * height * componentCount; 4 // CGDataProvider create 5 CGDataProviderRef dataProviderRef = CGDataProviderCreateWithData(nil, imageBytes, imageBufferSize, bufferFree); 6 // 8bit 7 NSUInteger bitsPerComponent = 8; 8 // 24 if RGB 32 if RGBA 9 NSUInteger bitsPerPixel = bitsPerComponent * componentCount; 10 // bytes per row 11 NSUInteger bytesPerRow = width * bitsPerPixel / 8; 12 // CGImage 13 CGImageRef cgImage = CGImageRetain(CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, CGColorSpaceCreateDeviceGray(), (CGBitmapInfo)kCGImageAlphaNone, dataProviderRef, nil, false, kCGRenderingIntentDefault)); 14 15 CGDataProviderRelease(dataProviderRef); 16 17 UIImage *image =[UIImage imageWithCGImage:cgImage]; 18 CGImageRelease(cgImage); 19 20 return image; 21}
ビット配列は下記で作っています。(大きい画像、小さい画像の2つ)
objectivec
1- (void)setupBitmapArrays { 2 bitmapImages = [NSMutableArray array]; 3 insideBitmapImages = [NSMutableArray array]; 4 5 for (int i = 0; i < FRAME; i++) { 6 imageBytesArray[i] = calloc(imageViewWidth * imageViewHeight * componentCount, sizeof(UInt8)); 7 for (int j = 0; j < imageViewWidth * imageViewHeight; j++) { 8 imageBytesArray[i][j] = random(); 9 } 10 } 11 12 for (int i = 0; i < FRAME; i++) { 13 insideImageBytesArray[i] = calloc(insideImageViewWidth * insideImageViewHeight * componentCount, sizeof(UInt8)); 14 for (int j = 0; j < insideImageViewWidth * insideImageViewHeight; j++) { 15 insideImageBytesArray[i][j] = random(); 16 } 17 } 18}
ドットのサイズが画像ごとに違ってしまう原因がわかる方、同じようなことを経験ある方、ご教授いただけましたら嬉しいです。
よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/07 08:17