1

私が求めていること: スキャンプロセス中に画像の上部に追加される1/4インチの空白を追加しようとしています。

Kofax Image Controls Toolkitを使用すると、次のいずれかのイベントで、スキャン時に画像の上部に空白を追加することができますか?

  • _PageStart
  • _PageEnd
  • _PageAnnotate
  • _PageDone

使用可能なプロパティのほとんどは読み取り専用です...最初にスキャンサイズを14インチに設定でき、11インチのドキュメントをスキャンすると、画像の下部に3インチ余分に表示されます。私は同じ原則を達成したいと思っていますが、ドキュメントの上部にあり、高さは約1/4インチです。

4

1 に答える 1

0

それで、これを可能にするために私が行ったすべての研究において、私はそれが実際には不可能であるという結論に達しました...

この方法の唯一の欠点は、事後の速度の問題でした。それは物事を少し遅くすることになりました..これが他の誰かを助けることを願っています!それがあなたを喜ばせるのを助けるならば、賛成してください。;)

私がやったことは、Kofax Image Controlsによって発生した_PageAnnotateイベントを使用せず、KofaxScanコントロールで.hDCCreate=falseを設定してそのイベントをオフにすることになりました。スキャン時にDCを作成しないと、プロセスが少しスピードアップし、画像のすべての非圧縮と圧縮でプロセッサが停止することはありません。

組み込みのKofaxImageControlsイベント_PageAnnotateを使用する代わりに、_PageDoneイベントを使用し、そこからネイティブのc#オブジェクト/関数を使用して目的を達成しました。以下は私が最終的に作成したコードです。

if (!Imaging.AnnotateImage(sImageFileName, "This is my annotation..."))
{
    Debug.WriteLine("Scan Error!  Could not annotate the image.");
}

私が作成したクラスのコードは「Imaging.cs」と呼ばれます...

static class Imaging
{
    public static bool AnnotateImage(string sFilePath, string sText)
    {
        try
        {
            // Get an ImageCodecInfo object that represents the TIFF codec.
            ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/tiff");
            Encoder myEncoder = Encoder.Compression;
            EncoderParameters myEncoderParameters = new EncoderParameters(1);
            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
            myEncoderParameters.Param[0] = myEncoderParameter;

            //Create some global variables
            Point pointPosition = new Point(0, 0);
            PointF pPos = new PointF((float)pointPosition.X, (float)pointPosition.Y);
            Bitmap newBmp;
            Graphics g;
            Font fNewFont;
            SizeF sizeTextSize;
            Rectangle rectTextSize;

            //Set inital width and height variables
            int iW;
            int iH;
            int iAnnotationH = 44;

            using(Image iSource = Image.FromFile(sFilePath))
            {
                iW = iSource.Width;
                iH = iSource.Height;

                //Increase the height of the image
                iH += iAnnotationH;

                //Create the new bitmap object
                newBmp = new Bitmap(iW, iH);
                newBmp.SetResolution(200.0F, 200.0F);
                g = Graphics.FromImage(newBmp);
                g.Clear(Color.White);
                g.DrawImageUnscaled(iSource, 0, iAnnotationH, iW, iH);

                //Create the font object to draw the annotation text
                fNewFont = new Font("Verdana", 12);

                //Get the size of the area to be drawn then convert it to a rect
                sizeTextSize = g.MeasureString(sText, fNewFont);
                rectTextSize = new Rectangle(pointPosition.X, pointPosition.Y, (int)sizeTextSize.Width, (int)sizeTextSize.Height);

                //Draw a white rect
                g.FillRectangle(Brushes.White, rectTextSize);
                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                g.DrawString(sText, fNewFont, Brushes.Black, pPos);
            }

            //Save the changed image
            newBmp.Save(sFilePath, myImageCodecInfo, myEncoderParameters);
        }
        catch
        {
            return false;
        }

        return true;
    }

    static ImageCodecInfo GetEncoderInfo(String mimeType)
    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for (j = 0; j < encoders.Length; ++j)
        {
            if (encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;
    }
}
于 2012-11-01T20:33:42.053 に答える