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
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_Funcs
IF 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