问题描述
我正在使用 Zxing
库来生成条形码。我正在尝试捕获该条形码以存储以备将来参考。
我创建了自定义条形码视图。并为 iOS 和 Android 实现了渲染器。但在 iOS 中,图像是黑色的。我从互联网上尝试了很多代码,但都没有成功。
你能告诉我这段代码有什么问题吗?
自定义条码视图
public class BarcodeView : StackLayout
{
public EventHandler OnDrawBitmap;
public static readonly BindableProperty BarcodeUrlProperty = BindableProperty.Create(nameof(BarcodeUrl),typeof(string),default(string));
public string BarcodeUrl
{
get { return (string)GetValue(BarcodeUrlProperty); }
set { SetValue(BarcodeUrlProperty,value); }
}
}
Xaml 实现
<custom:BarcodeView Opacity="0" x:Name="barcodeview"><!---->
<zxing:ZXingBarcodeImageView x:Name="QRCodeView" BarcodeFormat="CODE_93"
HeightRequest="50" WidthRequest="800" BarcodeValue="{Binding RandomBarcodeNumber}" VerticalOptions="Center">
<zxing:ZXingBarcodeImageView.BarcodeOptions>
<zxcm:EncodingOptions Width="800" Height="200"/>
</zxing:ZXingBarcodeImageView.BarcodeOptions>
</zxing:ZXingBarcodeImageView>
</custom:BarcodeView>
iOS 渲染器
public class BarcodeVieWrenderer : VieWrenderer<BarcodeView,UIView>
{
public BarcodeVieWrenderer()
{
}
BarcodeView view;
protected override void OnElementChanged(ElementChangedEventArgs<BarcodeView> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
//register the event
e.NewElement.OnDrawBitmap += NewElement_OnDrawBitmap;
}
}
private void NewElement_OnDrawBitmap(object sender,EventArgs e)
{
try
{
var formsView = Element;
var rect = new CGRect(formsView.Bounds.X,formsView.Bounds.Y,formsView.Bounds.Width,formsView.Bounds.Height);
var iOSView = ConvertFormsToNative(formsView,rect);
UIImage image = ConvertViewToImage(iOSView);
if (image != null)
formsView.BarcodeUrl = image.AsPNG().GetBase64EncodedString(Foundation.NSDataBase64EncodingOptions.EndLineWithLineFeed);
UIGraphics.EndImageContext();
}
catch (Exception ex)
{
}
}
private UIImage ConvertViewToImage(UIView iOSView)
{
try
{
UIGraphics.BeginImageContextWithOptions(iOSView.Bounds.Size,true,0);
iOSView.DrawViewHierarchy(iOSView.Bounds,true);
var context = UIGraphics.GetCurrentContext();
iOSView.Layer.RenderInContext(context);
var img = UIGraphics.GetimageFromCurrentimageContext();
return img;
}
catch (Exception ex)
{
return null;
}
}
public static UIView ConvertFormsToNative(Xamarin.Forms.View view,CGRect size)
{
var renderer = Platform.CreateRenderer(view);
renderer.NativeView.Frame = size;
renderer.NativeView.AutoresizingMask = UIViewAutoresizing.All;
renderer.NativeView.ContentMode = UIViewContentMode.ScaletoFill;
renderer.Element.Layout(size.ToRectangle());
var nativeView = renderer.NativeView;
nativeView.SetNeedsLayout();
return nativeView;
}
}
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)