2015-10-14 68 views
0

我将ios应用程序移植到android,并在从字节数组创建它时遇到位图颜色问题。此代码工作完全在iOS(C# - Xamarin):Android:创建的位图有错误的颜色

const int bitsPerComponent = 8; 
const int bytePerPixel = 4; 
var bytesPerRow = bytePerPixel * BarcodeImageWidth; 
var colorSpace = CGColorSpace.CreateDeviceRGB(); 

var context = new CGBitmapContext(byteArray, 
    BarcodeImageWidth, BarcodeImageHeight, 
    bitsPerComponent, bytesPerRow, 
    colorSpace, CGImageAlphaInfo.NoneSkipFirst); 

BarcodeImageView.Image = new UIImage(context.ToImage()); 

ios

而在Android这个代码使用错误的颜色位图:

var bitmap = Bitmap.CreateBitmap(barcode.Width, barcode.Height, Bitmap.Config.Argb8888); 
bitmap.CopyPixelsFromBuffer(ByteBuffer.Wrap(imageBytes)); 
barcode.SetImageBitmap(bitmap); 

android

+0

对我来说,它看起来像你imageBytes不包含数据在argb格式... – Selvin

+0

@Selvin所以我能做什么呢? –

回答

0

修正通过手动创建的具有跳过的第一个(alpha)字节的像素数组。

int pixelsCount = imageBytes.Length/4; 
int[] pixels = new int[pixelsCount]; 
for (int i = 0; i < pixelsCount; i++) 
{ 
    var offset = 4 * i; 
    int r = imageBytes[offset + 1]; 
    int g = imageBytes[offset + 2]; 
    int b = imageBytes[offset + 3]; 
    pixels[i] = Color.Rgb(r, g, b); 
} 

var bitmap = Bitmap.CreateBitmap(pixels, barcode.Width, barcode.Height, Bitmap.Config.Argb8888); 
barcode.SetImageBitmap(bitmap);