Создание эскиза сайта с помощью geckoFx приводит к ошибке
Я пытаюсь создать образ сайта с помощью geckoFX в WPF/ C#. Когда я запускаю код, я получаю сообщение об ошибке.
ошибка - ширина и высота растрового изображения с использованием geckoWebBorwser (int)wWidth и (int) wHeight; текст ошибки (параметр недействителен) и System.ArgumentException
Ошибка происходит на линии
Bitmap bmp = new Bitmap(wWidth, wHeight); //Error here (Parameter is not valid.
System.ArgumentException)
Пример кода:
class GetWebCapture
{
public static BitmapSource GetThumb(Skybound.Gecko.GeckoWebBrowser wb, int w, int h, int wWidth, int wHeight)
{
if (wb != null)
{
Bitmap bmp = new Bitmap(wWidth, wHeight);
Rectangle rec = new Rectangle(0, 0, wWidth, wHeight);
Rectangle rec1 = new Rectangle(0, 0, w, h);
wb.DrawToBitmap(bmp, rec);
Graphics gfx = Graphics.FromImage(bmp);
gfx.CompositingQuality = CompositingQuality.HighQuality;
gfx.SmoothingMode = SmoothingMode.HighQuality;
gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
gfx.DrawImage(bmp, rec);
Bitmap newImage = new Bitmap(290, 200);
using (Graphics gr = Graphics.FromImage(newImage))
{
gr.SmoothingMode = SmoothingMode.AntiAlias;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(bmp, new Rectangle(0, 0, 290, 200));
}
BitmapSource source = loadBitmaps(newImage);
gfx.Dispose();
bmp.Dispose();
return source;
}
else
{
return null;
}
public static BitmapSource loadBitmaps(System.Drawing.Bitmap source)
{
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(source.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
}
С WebKit.Net этот метод работает нормально, с IE webBrowser у меня есть другой метод, и этот метод работает хорошо, но они не подходят для моего проекта.
1 ответ
Я создал небольшой образец (geckoFx был неизвестен, но выглядел интересно). Следующий код работает нормально:
namespace WebsiteScreeshot {
class Program {
static void Main ( string[] args ) {
if ( args.Length != 2 ) {
Console.WriteLine( "You need to provide URL and image" );
return;
}
Xpcom.Initialize( @"C:\Libs\xulrunner" );
var browser = new GeckoWebBrowser();
browser.CreateControl();
while ( !browser.IsHandleCreated ) {
System.Threading.Thread.Sleep( 200 );
System.Windows.Forms.Application.DoEvents();
}
browser.Navigate( args[0] );
while ( browser.IsBusy ) {
System.Threading.Thread.Sleep( 200 );
System.Windows.Forms.Application.DoEvents();
}
browser.Width = 1044;
browser.Height = 768;
using ( Bitmap bmp = new Bitmap( 1024, 768 ) ) {
Rectangle rec = new Rectangle( 0, 0, 1024, 768 );
browser.DrawToBitmap( bmp, rec );
bmp.Save( args[1] );
}
browser = null;
}
}
}
Я получил сообщение об ошибке в browser.DrawToImage, когда я не изменил размер браузера, чтобы он соответствовал по крайней мере размеру прямоугольника.