Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#裁剪位图-克隆与图形_C#_Image Processing_Bitmap_Tesseract - Fatal编程技术网

C#裁剪位图-克隆与图形

C#裁剪位图-克隆与图形,c#,image-processing,bitmap,tesseract,C#,Image Processing,Bitmap,Tesseract,我注意到Graphics.DrawImage函数用于裁剪位图时出现了一种奇怪的行为 那两个样本 RectangleF area = new RectangleF(); area.X = X / ratio.X; area.Y = Y / ratio.Y; area.Width = W / ratio.X; area.Height = H / ratio.Y; // Clone way var croppedBitmap = imageToProcess.Clone(area, imageToP

我注意到
Graphics.DrawImage
函数用于裁剪位图时出现了一种奇怪的行为

那两个样本

RectangleF area = new RectangleF();
area.X = X / ratio.X;
area.Y = Y / ratio.Y;
area.Width = W / ratio.X;
area.Height = H / ratio.Y;

// Clone way
var croppedBitmap = imageToProcess.Clone(area, imageToProcess.PixelFormat);

无法生成完全相同的位图图像输出


问题是,图形方式比克隆方式快(0.05倍比s中的0.00倍)

但是

使用OCR的图形输出(使用Tesseract)不会给出结果。然而,克隆方法生成的相同位图给出了完美的结果。我想了解原因,因为图像属性和视觉似乎是相同的


输出和属性(克隆|图形)


“问题是,图形方式比克隆方式快”-不清楚您测量的时间和准确程度。您介意发布测试代码吗?这两个块正是我代码中的函数。我通过在矩形初始化之前存储
DateTime.UtcNow.milisteconds
来测量它们,并在每个块之后用旧的
DateTime.UtcNow.milisteconds
减去新的
DateTime.UtcNow.milisteconds
(但仍然在相同的函数中)。我想分享一个测试代码,但是,这两个生成的位图之间的唯一区别是tesseract OCR输出。你正在测量它。哦,是的,实际上!我仍然想理解为什么输出不同,您如何确定它们“没有产生完全相同的位图图像输出”?我从你的图像中剪下了两个片段,并将它们保存在gimp中,png文件是相同的。
RectangleF area = new RectangleF();
area.X = X / ratio.X;
area.Y = Y / ratio.Y;
area.Width = W / ratio.X;
area.Height = H / ratio.Y;

// Graphics way
var croppedBitmapg = new Bitmap((int) area.Width, (int) area.Height);
using (Graphics g = Graphics.FromImage(croppedBitmapg))
{
    g.DrawImage(imageToProcess, new Rectangle(0, 0, croppedBitmapg.Width, croppedBitmapg.Height), area, GraphicsUnit.Pixel);
};