diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs index 1b9cd070..51f044f5 100644 --- a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs @@ -20,6 +20,73 @@ namespace WindowsFormsApp1 InitializeComponent(); } + private Bitmap createBitmap(UIntPtr image) + { + IntPtr imageData = HGScannerLib.HGLib_GetImageData(image); + + HGScannerLib.HGLibImageInfo imageInfo; + imageInfo.width = 0; + imageInfo.height = 0; + imageInfo.type = 0; + imageInfo.widthStep = 0; + imageInfo.origin = 0; + HGScannerLib.HGLib_GetImageInfo(image, ref imageInfo); + + Bitmap curBitmap = null; + if (imageInfo.type == 1) // BINARY + { + curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, + System.Drawing.Imaging.PixelFormat.Format1bppIndexed, imageData); + + System.Drawing.Imaging.ColorPalette palette = curBitmap.Palette; + palette.Entries[0] = Color.FromArgb(0, 0, 0); + palette.Entries[1] = Color.FromArgb(255, 255, 255); + curBitmap.Palette = palette; + } + else if (imageInfo.type == 2) // GRAY + { + curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, + System.Drawing.Imaging.PixelFormat.Format8bppIndexed, imageData); + + System.Drawing.Imaging.ColorPalette palette = curBitmap.Palette; + for (int i = 0; i < palette.Entries.Length; i++) + { + palette.Entries[i] = Color.FromArgb(i, i, i); + } + curBitmap.Palette = palette; + } + else if (imageInfo.type == 3) // BGR + { + curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, + System.Drawing.Imaging.PixelFormat.Format24bppRgb, imageData); + } + else if (imageInfo.type == 4) // RGB + { + curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); + + Rectangle rect = new Rectangle(0, 0, (int)imageInfo.width, (int)imageInfo.height); + + System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb); + unsafe + { + byte* dest = (byte*)(bmpData.Scan0); + byte* src = (byte*)imageData; + for (int i = 0; i < (int)imageInfo.height; i++) + { + for (int j = 0; j < (int)imageInfo.width; j++) + { + dest[i * bmpData.Stride + j * 3 + 0] = src[i * imageInfo.widthStep + j * 3 + 2]; + dest[i * bmpData.Stride + j * 3 + 1] = src[i * imageInfo.widthStep + j * 3 + 1]; + dest[i * bmpData.Stride + j * 3 + 2] = src[i * imageInfo.widthStep + j * 3 + 0]; + } + } + } + curBitmap.UnlockBits(bmpData); + } + + return curBitmap; + } + private void button1_Click(object sender, EventArgs e) { UIntPtr image = HGScannerLib.HGLib_LoadImage(StringToUtf8("1.jpg")); @@ -33,68 +100,7 @@ namespace WindowsFormsApp1 saveParam.ocr = 0; HGScannerLib.HGLib_SaveImage(image, StringToUtf8("2.jpg"), ref saveParam); - IntPtr imageData = HGScannerLib.HGLib_GetImageData(image); - - HGScannerLib.HGLibImageInfo imageInfo; - imageInfo.width = 0; - imageInfo.height = 0; - imageInfo.type = 0; - imageInfo.widthStep = 0; - imageInfo.origin = 0; - HGScannerLib.HGLib_GetImageInfo(image, ref imageInfo); - - Bitmap curBitmap = null; - if (imageInfo.type == 1) // BINARY - { - curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, - System.Drawing.Imaging.PixelFormat.Format1bppIndexed, imageData); - - System.Drawing.Imaging.ColorPalette palette = curBitmap.Palette; - palette.Entries[0] = Color.FromArgb(0, 0, 0); - palette.Entries[1] = Color.FromArgb(255, 255, 255); - curBitmap.Palette = palette; - } - else if (imageInfo.type == 2) // GRAY - { - curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, - System.Drawing.Imaging.PixelFormat.Format8bppIndexed, imageData); - - System.Drawing.Imaging.ColorPalette palette = curBitmap.Palette; - for (int i = 0; i < palette.Entries.Length; i++) - { - palette.Entries[i] = Color.FromArgb(i, i, i); - } - curBitmap.Palette = palette; - } - else if (imageInfo.type == 3) // BGR - { - curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, (int)imageInfo.widthStep, - System.Drawing.Imaging.PixelFormat.Format24bppRgb, imageData); - } - else if (imageInfo.type == 4) // RGB - { - curBitmap = new Bitmap((int)imageInfo.width, (int)imageInfo.height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - - Rectangle rect = new Rectangle(0, 0, (int)imageInfo.width, (int)imageInfo.height); - - System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - unsafe - { - byte* dest = (byte*)(bmpData.Scan0); - byte* src = (byte*)imageData; - for (int i = 0; i < (int)imageInfo.height; i++) - { - for (int j = 0; j < (int)imageInfo.width; j++) - { - dest[i * bmpData.Stride + j * 3 + 0] = src[i * imageInfo.widthStep + j * 3 + 2]; - dest[i * bmpData.Stride + j * 3 + 1] = src[i * imageInfo.widthStep + j * 3 + 1]; - dest[i * bmpData.Stride + j * 3 + 2] = src[i * imageInfo.widthStep + j * 3 + 0]; - } - } - } - curBitmap.UnlockBits(bmpData); - } - + Bitmap curBitmap = createBitmap(image); curBitmap.Save("3.jpg"); HGScannerLib.HGLib_ReleaseImage(image); @@ -240,13 +246,16 @@ namespace WindowsFormsApp1 String fileName = String.Format("Scan_{0}.jpg", m_scanCount); ++m_scanCount; - HGScannerLib.HGLibSaveImageParam saveParam; - saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); - saveParam.jpegQuality = 80; - saveParam.tiffCompression = 4; - saveParam.tiffJpegQuality = 80; - saveParam.ocr = 0; - HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam); + Bitmap curBitmap = createBitmap(image); + curBitmap.Save(fileName); + + //HGScannerLib.HGLibSaveImageParam saveParam; + //saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); + //saveParam.jpegQuality = 80; + //saveParam.tiffCompression = 4; + //saveParam.tiffJpegQuality = 80; + //saveParam.ocr = 0; + //HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam); } public String Utf8ToString(IntPtr str)