1
A
回答
0
你可以將它轉換爲8位灰度圖像(見Convert UIImage to 8 bits,或見the link that Spynet shared包括其他排列),但我無法適應,要創建4位灰度位圖(CGBitmapContextCreate
抱怨說,它不是一個有效的參數組合)。它看起來應該是理論上可行的(有012位的,pixel format types下列出的4位格式),但我無法讓它工作這種技術。
+0
感謝您的回答,我會檢查它。 –
0
我找到了將圖像轉換爲4位灰度的解決方案,代碼如下。
-(UIImage *)grayscaleImageAt4Bits:(UIImage *)_image
{
CGImageRef imageRef = [_image CGImage];
int width = CGImageGetWidth(imageRef);
int height = CGImageGetHeight(imageRef);
NSInteger _bitsPerComponent = 8;
NSInteger _bytesPerPixel = 1;
NSInteger _bytesPerRow = _bytesPerPixel * width;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
uint8_t *sourceData = malloc(height * width * _bytesPerPixel);
CGContextRef context = CGBitmapContextCreate(sourceData,
width,
height,
_bitsPerComponent,
_bytesPerRow,
colorSpace,
kCGImageAlphaNone);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
const int _redIndex = 0;
const int _greenIndex = 1;
const int _blueIndex = 2;
int _byteIndex = 0;
int _bitIndex = 0;
uint8_t *_newImageBits = malloc(height * width * _bytesPerPixel/2);
for(int j=0;j<height;j++)
{
for(int k=0;k<width;k++)
{
UInt8 _perPixel = _newImageBits[_byteIndex];
UInt8 *rgbPixel = (UInt8 *) &sourceData[j * width + k];
int _red = rgbPixel[_redIndex];
int _green = rgbPixel[_greenIndex];
int _blue = rgbPixel[_blueIndex];
int _pixelGrayValue = (_green + _red + _blue)/16;
UInt8 _pixelByte = (UInt8)_pixelGrayValue;
_perPixel |= (_pixelByte<<4);
_newImageBits[_byteIndex] = _perPixel;
_bitIndex += 4;
if(_bitIndex > 7)
{
_byteIndex++;
_bitIndex = 0;
}
}
}
free(sourceData);
//Direct fetch Bytes of 4-Bits, then you can use this Bytes (sourceData) to do something.
sourceData = _newImageBits;
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage *_grayImage = [UIImage imageWithCGImage:cgImage];
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
//Convert to NSData type, then you can use this NSData (_sourceImageData) to do something.
NSData *_sourceImageData = [NSData dataWithBytes:sourceData length:(width * height * _bytesPerPixel)];
free(sourceData);
return _grayImage;
}
而iOS只支持至少8位顏色顯示,所以4位數據只傳輸到openGL的紋理使用。
+0
iOS 8,現在給出一個警告:'將枚舉類型'enum CGImageAlphaInfo'隱式轉換爲不同的枚舉類型'CGBitmapInfo'(又名'enum CGBitmapInfo')' –
相關問題
- 1. 如何將捕獲的位圖轉換爲8位圖像作爲灰度?
- 2. 將32bpp位圖轉換爲16bpp(灰度)
- 3. 在.Net 2.0中將8位灰度tiff圖像轉換爲8位灰度jpg
- 4. 如何將16位,TIFF,灰度圖像轉換爲32位,TIFF,在Java中的灰度圖像?
- 5. Android:將imageview轉換爲位圖,灰度,將位圖轉換爲imageview
- 6. 將圖像轉換爲灰度圖像
- 7. 轉換8位灰度級圖像以7位灰度級圖像
- 8. 如何將16位灰度圖像轉換爲java中的RGB圖像?
- 9. 如何將位圖圖像轉換爲Windows Phone 7中的png?
- 10. 如何將圖像轉換爲位圖
- 11. 如何將位圖轉換爲圖像
- 12. 將PNG圖像轉換爲像素灰度值特徵向量
- 13. 將RGB圖像轉換爲灰度和灰度轉換爲RGB圖像?
- 14. 如何將32位RGBA圖像轉換爲保存灰度圖的alpha
- 15. 將位圖(RGB_565)轉換爲灰度(8位)Android
- 16. 將GIF圖像轉換爲PNG格式,32位深度
- 17. 如何將灰度位圖轉換爲alpha蒙版?
- 18. 如何將short []轉換爲int []來創建灰度位圖?
- 19. MATLAB/Opencv:將24位RGB圖像轉換爲16位灰色
- 20. 如何將24位圖像轉換爲16位rgb565位圖?
- 21. J2ME:將透明PNG圖像轉換爲灰度
- 22. 灰度PNG圖像
- 23. 如何將RGB圖像轉換爲灰度圖像?
- 24. 如何將灰度圖像轉換爲RGB圖像?
- 25. 位圖8位灰度圖像在C
- 26. 在java中轉換8位灰度RAW圖像中的圖像
- 27. 16位灰度png圖像的Python圖像處理
- 28. 將簡單圖像轉換爲灰度
- 29. 將圖像轉換爲灰度
- 30. 將彩色圖像轉換爲灰度
http://stackoverflow.com/questions/1298867/convert-image-to-grayscale – Spynet
謝謝,我會檢查它,代碼讓我有些事情要做。 –