如何在 Xamarin iOS 中将 CGBitmap 的像素数据作为字节 [] 获取
Posted
技术标签:
【中文标题】如何在 Xamarin iOS 中将 CGBitmap 的像素数据作为字节 [] 获取【英文标题】:How to get pixel data of CGBitmap as byte[] in Xamarin iOS 【发布时间】:2017-06-20 16:30:55 【问题描述】:我有CGBitmap
实例(每像素32 位),我想在byte[]
中获取图像数据。
字节数组应该获取 ARGB 格式的值,因此前 4 个字节对应于图像字节中每个 alpha、红色、绿色和蓝色的第一个像素strong> 价值观。
【问题讨论】:
检查这个:***.com/questions/448125/… 如果不够清楚,请告诉我,我会为您提供示例代码 【参考方案1】:这是一个想法。图片是 UIImage
CGImage imageRef = image.CGImage;
int width = (int)image.Size.Width;
int height = (int)image.Size.Height;
CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB();
byte[] rawData = new byte[height * width * 4];
int bytesPerPixel = 4;
int bytesPerRow = bytesPerPixel * width;
int bitsPerComponent = 8;
CGContext context = new CGBitmapContext(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
CGBitmapFlags.PremultipliedLast | CGBitmapFlags.ByteOrder32Big);
context.DrawImage((CGRect)new CGRect(0, 0, width, height), (CGImage)imageRef);
// Now your rawData contains the image data in the RGBA8888 pixel format.
int pixelInfo = (width * y + x) * 4; // The image is png
//red,green, blue,alpha
byte red = rawData[pixelInfo];
byte green = rawData[pixelInfo+1];
byte blue = rawData[pixelInfo+2];
byte alpha = rawData[pixelInfo + 3];
【讨论】:
它就像一个魅力!我不明白为什么它会起作用,因为我使用的是 ARGB8888,而不是 RGBA8888。您确定字节按您在回答中所说的方式排序吗? 好的,现在您的代码(最后一部分)中似乎有一部分可以重新排序字节。但是,它只针对一个像素进行(同样的事情应该应用于每个像素)。难道没有更好的方法吗? 也许使用 CGBitmapFlags.PremultipliedFirst 就足够了? 我的任务是找到特定像素的颜色。您可以尝试其他方式。以上是关于如何在 Xamarin iOS 中将 CGBitmap 的像素数据作为字节 [] 获取的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c# 在 Xamarin.Ios 中将 UIColor 转换为字符串和字符串转换为 UIColor
无法在 Xamarin iOS 应用程序中将文本共享到电子邮件或短信中
如何以 xamarin 形式将一个内容页面从客户端项目(IOS/Android)导航到另一个内容页面?
如何在 Android 应用程序中将 iCloud 日历与 xamarin 同步?