16. Juni 2011 14:50
        public void ConvertFileToBmpStream(object ObjPictureStream,
                                           string StrSourceFile,
                                           int NewHeigth,
                                           int NewWidth)
        {
            IStream StmPicStream = ObjPictureStream as IStream;         // soll später das Bild aufnehmen
            MemoryStream ms = new MemoryStream();                       // ein Memory Stream unterstützt .SAVE as BitMap
            IntPtr rwBytes = Marshal.AllocHGlobal(4);                   // 4 Byte allozieren - <stream>.Write benötigt 
                                                                        // später diesen Pointer
            Image img = Image.FromFile(StrSourceFile);                  // Ein Image z.B. aus einer .TIF Datei lesen
            Size MySize = new Size(NewWidth, NewHeigth);                // Neues Size Objekt für die Skalierung
            Bitmap MyBitMap = new Bitmap(img, MySize);                  // skaliertes BitMap erzeugen
            MyBitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);  // Neues BitMap im Memory-Stream speichern
            int StreamLength = Convert.ToInt32(ms.Length);              // wie lang ist der memory Stream? Könnte > 32 Bit sein,
                                                                        // deshalb hier ein ToInt32.
            byte[] buffer = new byte[StreamLength];                     // Den memory-Stream in ein Byte-Array übertragen
            buffer = ms.ToArray();                                      // den Inhalt des memory-Stream in das byte-Array übertragen
            StmPicStream.Write(buffer, StreamLength, rwBytes);          // Das Byte-Array kann nun in den als Reference übergebenen
                                                                        // Stream geschrieben werden. Hier braucht´s wohl den Pointer,
                                                                        // uns ansonsten gar nicht interessiert.
            Marshal.FreeHGlobal(rwBytes);                               // Den 4 byte Speicherbereich für den pointer wieder freigeben
            ms.Dispose();                                               // Den Memory-Stream verwerfen
            img.Dispose();                                              // Wichtig, sonst bleibt der Handle auf die Source-Datei offen!
            MyBitMap.Dispose();                                         // ... und weg damit.
        }
IF ISCLEAR(AutPicConvert) THEN CREATE(AutPicConvert);
...
LocRecTemp.Thumbnail.CREATEINSTREAM(LocStreamPreviewPic);
AutPicConvert.ConvertFileToBmpStream(LocStreamPreviewPic, 'D:\1.TIF', 100, 100);
... 
           // Die AcquiredImages[] sind eine Collection Vintasoft Scan-Bibliothek
           Bitmap MyBitMap = new Bitmap(deviceList[DeviceIndex].AcquiredImages[ImageIndex].GetAsBitmap(true), NewWidth, NewHeigth);
           // Das Speichern des BitMap im Memory-Stream ist entscheidend, dann weiter, wie in dem großen Beispiel
           MyBitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);16. Juni 2011 16:03
16. Juni 2011 16:18
 Wer aber nicht direkt mit Memory-Streams expertieren möchte, kann in C# auch einen 4-Zeiler implementieren:
  Wer aber nicht direkt mit Memory-Streams expertieren möchte, kann in C# auch einen 4-Zeiler implementieren:        public void ConvertJpegToBmp(string StrSourceFile, string StrDestFile, int DivHeigth, int DivWidth)
        {
            Image img = Image.FromFile(StrSourceFile);
            Size MySize = new Size(img.Height / DivHeigth, img.Width / DivWidth);
            Bitmap MyBitMap = new Bitmap(img, MySize);
            MyBitMap.Save(StrDestFile, System.Drawing.Imaging.ImageFormat.Bmp);
        }  IF EXISTS(InTxtSourcePath) THEN
    CS_Tools.ConvertJpegToBmp(InTxtSourcePath, TxtTempBMPpath, InIntDivH, InIntDivW);16. Juni 2011 16:41
17. Juni 2011 15:56
17. Juni 2011 17:46
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Drawing;
using System.IO;
[assembly: ClassInterface(ClassInterfaceType.AutoDual)]
namespace BosCsTools
{
    public interface IImage_Funcs
    {
        void ConvertJpegToBmp(string StrSourceFile, string StrDestFile, int DivHeigth, int DivWidth);
        void ConvertFileToBmpStream(object ObjPictureStream, string StrSourceFile, int NewHeigth, int NewWidth);
    }
    [ComVisible(true)]
    [ProgId("Image_Funcs")]
    [ClassInterface(ClassInterfaceType.None)]
    public class Image_Funcs : IImage_Funcs
    {
        public void ConvertJpegToBmp(string StrSourceFile, string StrDestFile, int DivHeigth, int DivWidth)
        {
            Image img = Image.FromFile(StrSourceFile);
            Size MySize = new Size(img.Height / DivHeigth, img.Width / DivWidth);
            Bitmap MyBitMap = new Bitmap(img, MySize);
            MyBitMap.Save(StrDestFile, System.Drawing.Imaging.ImageFormat.Bmp);
        }
        public void ConvertFileToBmpStream(object ObjPictureStream,
                                   string StrSourceFile,
                                   int NewHeigth,
                                   int NewWidth)
        {
            IStream StmPicStream = ObjPictureStream as IStream;         // soll später das Bild aufnehmen
            MemoryStream ms = new MemoryStream();                       // ein Memory Stream unterstützt .SAVE as BitMap
            IntPtr rwBytes = Marshal.AllocHGlobal(4);                   // 4 Byte allozieren - <stream>.Write benötigt 
            // später diesen Pointer
            Image img = Image.FromFile(StrSourceFile);                  // Ein Image z.B. aus einer .TIF Datei lesen
            Size MySize = new Size(NewWidth, NewHeigth);                // Neues Size Objekt für die Skalierung
            Bitmap MyBitMap = new Bitmap(img, MySize);                  // skaliertes BitMap erzeugen
            MyBitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);  // Neues BitMap im Memory-Stream speichern
            int StreamLength = Convert.ToInt32(ms.Length);              // wie lang ist der memory Stream? Könnte > 32 Bit sein,
            // deshalb hier ein ToInt32.
            byte[] buffer = new byte[StreamLength];                     // Den memory-Stream in ein Byte-Array übertragen
            buffer = ms.ToArray();               // den Inhalt des memory-Stream in das byte-Array übertragen
            StmPicStream.Write(buffer, StreamLength, rwBytes);      // Das Byte-Array kann nun in den als Reference übergebenen
            // Stream geschrieben werden. Hier braucht´s wohl den Pointer,
            // uns ansonsten gar nicht interessiert.
            Marshal.FreeHGlobal(rwBytes);      // Den 4 byte Speicherbereich für den pointer wieder freigeben
            ms.Dispose();                              // Den Memory-Stream verwerfen
            img.Dispose();                             // Wichtig, sonst bleibt der Handle auf die Source-Datei offen!
            MyBitMap.Dispose();                    // ... und weg damit.
        }
    }
}
LocRecItem Record Item   
LocStreamPreviewPic   InStream      
LocAutImaging Automation 'BosCsTools'.Image_FuncsIF ISCLEAR(LocAutImaging) THEN CREATE(LocAutImaging);
IF LocRecItem.GET('10018') THEN BEGIN
  LocRecItem.Picture.CREATEINSTREAM(LocStreamPreviewPic);
  LocAutImaging.ConvertFileToBmpStream(LocStreamPreviewPic, 'D:\1.TIF', 370, 270);
  LocRecItem.MODIFY;
  COMMIT;
  FORM.RUNMODAL(FORM::ShowPic, LocRecItem);
END;20. Juni 2011 09:08
20. Juni 2011 12:35
26. Juni 2012 18:29
       public void PicStreamToBMP(object objPicture, object ObjConvertedPicture, int NewHeigth, int NewWidth)
        {
            Bitmap MyBitMap = null;
            byte[] buffer1 = new byte[0xafc8];
            IntPtr rwBytes = Marshal.AllocHGlobal(4);
            IStream ComStmInPic = objPicture as IStream;   // Übergebenes Bild in COM-Stream konvertieren 
            MemoryStream MemStmInPic = new MemoryStream();  // In diesem Memory Buffer wird der COM-Stream gelesen ...
            int _rwBytes = 0;                                           
            do
            {
                ComStmInPic.Read(buffer1, 0xafc8, rwBytes);
                _rwBytes = Marshal.ReadInt32(rwBytes);
                MemStmInPic.Write(buffer1, 0, _rwBytes);      // ... um ihn in einen .Net Stream umzuwandeln!
            } while (_rwBytes > 0);
            Image img = Image.FromStream(MemStmInPic);  // Das Image aus dem MemoyStream lesen
            Size MySize = new Size(NewWidth, NewHeigth);   // Neues Size Objekt für die Skalierung
            
            if (NewHeigth == 0 & NewWidth == 0)
            { MyBitMap = new Bitmap(img); }
            else
            { MyBitMap = new Bitmap(img, MySize); }                             // skaliertes BitMap erzeugen
            IStream StmPicStream = ObjConvertedPicture as IStream;
            MemoryStream MemStmOutPic = new MemoryStream();       // Memory Stream für die Rückgabe
            MyBitMap.Save(MemStmOutPic, 
                          System.Drawing.Imaging.ImageFormat.Bmp);   // Neues BitMap im Memory-Stream speichern
            int StreamLength = Convert.ToInt32(MemStmOutPic.Length);   // MemoryStream kann bis zu 32 Bit lang sein 
            byte[] buffer = new byte[StreamLength];     // Den memory-Stream in ein Byte-Array übertragen
            buffer = MemStmOutPic.ToArray();
            StmPicStream.Write(buffer, StreamLength, rwBytes); 
            MemStmInPic.Dispose();
            MemStmOutPic.Dispose();                                     
            img.Dispose();                                           
            MyBitMap.Dispose();
            Marshal.FreeHGlobal(rwBytes);
        }ConvertPictureFromStream(VAR InRecItem : Record Item;VAR InTmpRecThumbnail : TEMPORARY Record TempStruct;InIntHeight : Integer;InIntWid
CLEAR(InTmpRecThumbnail);
InRecItem.CALCFIELDS(Picture);
IF InRecItem.Picture.HASVALUE THEN BEGIN
   IF ISCLEAR(LocAutImaging) THEN CREATE(LocAutImaging);
    InRecItem.Picture.CREATEOUTSTREAM(LocStreamPicture);
    InTmpRecThumbnail.Thumbnail.CREATEINSTREAM(LocStreamConverted);
    LocAutImaging.PicStreamToBMP(LocStreamPicture, LocStreamConverted, InIntHeight, InIntWidth);
   CLEAR(LocAutImaging);
END; 
 17. August 2012 11:16
27. August 2012 09:52