申し訳ありませんが、これは既にどこかで答えられていますが、見つけられませんでした。Xamarin iOS:UIImageピクセルの色をピクセル単位で変更する方法
基本的に、コード自体が黒で背景が白です(これはUIImageです)。白い背景の色を透明またはカスタムの色に変更し、QRコードの色を黒から白に変更したいと思います。
(XamarinのiOSで)私はすでに、次のコードを使用して、特定のピクセルの色を取得する方法を知っている:static UIColor GetPixelColor(CGBitmapContext context, byte[] rawData,
UIImage barcode, CGPoint pt)
{
var handle = GCHandle.Alloc(rawData);
UIColor resultColor = null;
using (context)
{
context.DrawImage(new CGRect(-pt.X, pt.Y - barcode.Size.Height,
barcode.Size.Width, barcode.Size.Height), barcode.CGImage);
float red = (rawData[0])/255.0f;
float green = (rawData[1])/255.0f;
float blue = (rawData[2])/255.0f;
float alpha = (rawData[3])/255.0f;
resultColor = UIColor.FromRGBA(red, green, blue, alpha);
}
return resultColor;
}
これは、現在、私の関数である:
static UIImage GetRealQRCode(UIImage barcode)
{
int width = (int)barcode.Size.Width;
int height = (int)barcode.Size.Height;
var bytesPerPixel = 4;
var bytesPerRow = bytesPerPixel * width;
var bitsPerComponent = 8;
var colorSpace = CGColorSpace.CreateDeviceRGB();
var rawData = new byte[bytesPerRow * height];
CGBitmapContext context = new CGBitmapContext(rawData, width,
height, bitsPerComponent, bytesPerRow, colorSpace,
CGImageAlphaInfo.PremultipliedLast);
for (int i = 0; i < rawData.Length; i++)
{
for (int j = 0; j < bytesPerRow; j++)
{
CGPoint pt = new CGPoint(i, j);
UIColor currentColor = GetPixelColor(context, rawData,
barcode, pt);
}
}
}
誰もがどのように知っていますこれを行う ? ありがとうございます!
まず、あなたの答えをsoooたくさんありがとう!私はすべての個々のピクセルにアクセスする必要はありません:あなたが言ったように、上記のコードを使用したいと思います。私の問題は、UIImageを直接受け取っていて、CGImageがベースになっているだけです(CIImageがヌルです)、CIImageとして自分のイメージがあるようにそれを隠す方法はありますか?再度、感謝します ! – Praestolatio
@Praestolatio 'UIImage'(これには多くの異なるコンストラクタがあります)を渡して' CIImage'を作成することができます。 'var coreImage = new CIImage(aUIImageObject)); ' – SushiHangover
あなたのソリューションにはコンストラクタが見当たりませんでした。私の問題はこのコード行から来ているようです:return ImageSource.FromStream(()=> theQRCode.AsPNG()。AsStream());ここで、QRコードはソリューションから返されたUIImageです。 CIImageをXamarinに変換できない可能性がありますか?ImageSourceから?もう一度ありがとうございます – Praestolatio