Làm thế nào tôi có thể sử dụng đồ họa lõi chỉ để tạo ra một nền kết cấu tiếng ồn? Tôi bị kẹt trên phần nhiễu vì không có cách nào để thêm bộ lọc nhiễu trong đồ họa lõi ...Tiếng Gaussian Noise chỉ sử dụng Đồ họa lõi?
Trả lời
Khoảng một năm sau, tôi đã tìm thấy câu trả lời:
CGImageRef CGGenerateNoiseImage(CGSize size, CGFloat factor) CF_RETURNS_RETAINED {
NSUInteger bits = fabs(size.width) * fabs(size.height);
char *rgba = (char *)malloc(bits);
srand(124);
for(int i = 0; i < bits; ++i)
rgba[i] = (rand() % 256) * factor;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef bitmapContext = CGBitmapContextCreate(rgba, fabs(size.width), fabs(size.height),
8, fabs(size.width), colorSpace, kCGImageAlphaNone);
CGImageRef image = CGBitmapContextCreateImage(bitmapContext);
CFRelease(bitmapContext);
CGColorSpaceRelease(colorSpace);
free(rgba);
return image;
}
này có hiệu quả tạo ra một hình ảnh tiếng ồn đó là bảo đảm là ngẫu nhiên, và có thể được rút ra, bằng cách sử dụng mã từ câu trả lời Jason Harwig của .
Tạo png tiếng ồn, sau đó vẽ nó bằng cách sử dụng lớp phủ hỗn hợp.
// draw background
CGContextFillRect(context, ...)
// blend noise on top
CGContextSetBlendMode(context, kCGBlendModeOverlay);
CGImageRef cgImage = [UIImage imageNamed:@"noise"].CGImage;
CGContextDrawImage(context, rect, cgImage);
CGContextSetBlendMode(context, kCGBlendModeNormal);
Bằng đồ họa lõi tinh khiết, tôi muốn vẽ nhiễu trong Đồ họa lõi ... Yêu cầu của ứng dụng của tôi là nó không sử dụng tệp png, thật đáng buồn. –
Đó là một yêu cầu kỳ quặc. Tôi có thể thấy sự độc lập về độ phân giải là lý do, nhưng chỉ sử dụng hai png giải quyết khác nhau sẽ giải quyết điều đó. –
Tuy nhiên, điều đó có thể hoạt động ... Có cách nào để mã hóa cứng UIImage dưới dạng dữ liệu văn bản mà tôi có thể mang về từ một lớp tùy chỉnh không? EDIT: Tôi sẽ không thể tạo ra một lớp wrapper tùy chỉnh với một st64 mã hóa st64 của hình ảnh trong định dạng Retina, và viết một vài phương pháp đơn giản để trả lại hình ảnh trong bất kỳ kích thước/định dạng? –
Có một CIRandomGenerator trong CoreImageFilters là của iOS 6. Nhưng hãy nhớ rằng điều này không phải là tiếng ồn gaussian (vì nó không có trong câu trả lời trước đó).
- (UIImage*)linearRandomImage:(CGRect)rect
{
CIContext *randomContext = [CIContext contextWithOptions:nil];
CIFilter *randomGenerator = [CIFilter filterWithName: @"CIColorMonochrome"];
[randomGenerator setValue:[[CIFilter filterWithName:@"CIRandomGenerator"] valueForKey:@"outputImage"] forKey:@"inputImage"];
[randomGenerator setDefaults];
CIImage *resultImage = [randomGenerator outputImage];
CGImageRef ref = [randomContext createCGImage:resultImage fromRect:rect];
UIImage *endImage=[UIImage imageWithCGImage:ref];
return endImage;
}
- 1. Hình ảnh lõi và đồ họa lõi
- 2. Đồ họa chỉ sử dụng Standard C++?
- 3. đồ họa lõi xoay hình chữ nhật
- 4. nhầm lẫn về quartz2d, đồ họa lõi, hoạt hình lõi, hình ảnh cốt lõi
- 5. Làm mịn đường cong đồ họa cốt lõi
- 6. vẽ hình vòng cung dập nổi bằng đồ họa lõi
- 7. Hiệu ứng hình ảnh với đồ họa lõi
- 8. Cần tiếng Fractional Brownian Noise (FBM) và Perlin Giải thích tiếng ồn
- 9. Sử dụng đồ họa vector XAML trong ứng dụng WPF
- 10. Buộc máy sử dụng Card đồ họa chuyên dụng?
- 11. Laplacian sử dụng bộ lọc gaussian
- 12. Cách tạo hiệu ứng nổi hoặc bóng bằng cách sử dụng Đồ họa lõi (để vẽ bằng ngón tay)
- 13. vấn đề trong dòng vẽ bằng cách sử dụng đồ họa cốt lõi: bong bóng được hiển thị
- 14. Cách sử dụng ImageObserver trong phương thức đồ họa drawImage()
- 15. Giám sát việc sử dụng thẻ đồ họa
- 16. 2D Perlin Noise
- 17. Những phần nào của UIKit, Đồ họa cốt lõi, Hoạt ảnh lõi, OpenGL được phép trên chủ đề không chính?
- 18. Đồ họa mẫu ứng dụng .NET winforms
- 19. Xóa đồ họa và sơn lại đồ họa của JPanel?
- 20. Clojurescript, JavaScript, SVG, Biểu đồ, Đồ họa
- 21. Perlin noise gradient function
- 22. Môi trường đồ họa nào?
- 23. Chủ đề mã đồ họa lõi này có an toàn không?
- 24. Đồ họa vector trong Javascript?
- 25. Nhiều đường cắt bớt để tạo ảnh ghép trong đồ họa lõi
- 26. Hệ tọa độ đồ họa chính
- 27. Ghép đồ họa 3D
- 28. vẽ đồ họa với sơ đồ MIT
- 29. Perlin Noise cho 1D?
- 30. Đồ họa vector trong Android
Lưu ý rằng hình ảnh được trả về từ hàm này có số lần giữ lại +1 và cần được giải phóng bằng cách sử dụng CFRelease (hình ảnh) sau khi bạn vẽ xong. Nếu không, nó bị rò rỉ. Ngoài ra, tên của hàm nên được thay đổi để phản ánh điều này. Nó phải chứa "mới" hoặc "tạo" ở đâu đó. – Bryan
Cảm ơn! Đã sửa bằng 'CF_RETURNS_RETAINED'. –