When converting images, you may need to convert a byte array to another byte array. Snowbound Software’s RasterMaster Imaging SDK product for .NET lets you take an image, convert it to a byte array, and then save it as another byte array. This can help you when converting files from one format to another.
The code sample below explains how to convert a byte array to another byte array by saving and reading an image from memory:
***********************************************************************
‘PROGRAM: MemsaveForm.vb
‘
‘PURPOSE: Demonstrates how to use the SnowBound Library for saving to and
‘ reading image from memory.
‘
‘COMMENTS: Select an image from the open dialog box.
‘
‘Copyright (c) 2005, SnowBound Software.
‘
‘This is example code for all SnowBound customers to freely copy and
‘use however they wish.
‘
‘LIBRARY FUNCTIONS USED:
‘ Snowbnd() – Init Snowbound .Net component.
‘ clearImage() – Remove image from memory.
‘ CIMG_decompress_bitmap() – Load an image from disk.
‘ CIMG_save_bitmap_mem() – Save image to memory in desired
‘ format.
‘ CIMG_display_bitmap() – Display current image.
‘ CIMG_decompress_bitmap_mem() – Read image from memory.
**********************************************************************
Imports System.IO
Imports SbdNetLib
Public Class Form1
Inherits System.Windows.Forms.Form
# Region “Windows Form Designer generated code “
Public Sub New()
MyBase.New()
‘This call is required by the Windows Form Designer.
InitializeComponent()
‘Add any initialization after the InitializeComponent() call
End Sub
‘Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose( ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
‘Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
Private simg As Snowbnd
Private fileName As String
Private iLoadedFlag As Integer
Private status As Integer
Private arrImageSave As Byte()
Private iImgLength As Integer
‘NOTE: The following procedure is required by the Windows Form
Designer
‘It can be modified using the Windows Form Designer.
‘Do not modify it using the code editor.
Friend WithEvents btnLoad As System.Windows.Forms.Button
Friend WithEvents btnLoadMem As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents panImage As System.Windows.Forms.Panel
Friend WithEvents ofImageDialog As System.Windows.Forms.OpenFileDialog
Private Sub InitializeComponent()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager( GetType(Form1))
Me.btnLoad = New System.Windows.Forms.Button
Me.btnLoadMem = New System.Windows.Forms.Button
Me.Label1 = New System.Windows.Forms.Label
Me.panImage = New System.Windows.Forms.Panel
Me.ofImageDialog = New System.Windows.Forms.OpenFileDialog
Me.SuspendLayout()
‘
‘btnLoad
‘
Me.btnLoad.Font = New System.Drawing.Font(“Microsoft Sans Serif”, 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnLoad.Location = New System.Drawing.Point(168, 24)
Me.btnLoad.Name = “btnLoad”
Me.btnLoad.Size = New System.Drawing.Size(168, 32)
Me.btnLoad.TabIndex = 0
Me.btnLoad.Text = “Load Image File”
‘
‘btnLoadMem
‘
Me.btnLoadMem.Font = New System.Drawing.Font(“Microsoft Sans Serif”, 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnLoadMem.Location = New System.Drawing.Point(344, 24)
Me.btnLoadMem.Name = “btnLoadMem”
Me.btnLoadMem.Size = New System.Drawing.Size(168, 32)
Me.btnLoadMem.TabIndex = 1
Me.btnLoadMem.Text = “Get Image From Memory”
‘
‘Label1
‘
Me.Label1.Image = CType(resources.GetObject(“Label1.Image”), System.Drawing.Image)
Me.Label1.Location = New System.Drawing.Point(24, 16)
Me.Label1.Name = “Label1”
Me.Label1.Size = New System.Drawing.Size(136, 40)
Me.Label1.TabIndex = 2
‘
‘panImage
‘
Me.panImage.Location = New System.Drawing.Point(24, 64)
Me.panImage.Name = “panImage”
Me.panImage.Size = New System.Drawing.Size(512, 320)
Me.panImage.TabIndex = 3
‘
‘Form1
‘
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(680, 422)
Me.Controls.Add( Me.panImage)
Me .Controls.Add( Me.Label1)
Me .Controls.Add( Me.btnLoadMem)
Me.Controls.Add( Me.btnLoad)
Me.Name = “Form1”
Me.Text = “Form1”
Me.ResumeLayout( False)
End Sub
# End Region
Private Sub btnLoad_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
ofImageDialog.Filter = “Image files (*.bmp)|*.tif|All files (*.*)|*.*”
ofImageDialog.FilterIndex = 2
ofImageDialog.RestoreDirectory = True
If (ofImageDialog.ShowDialog() = DialogResult.OK) Then
iLoadedFlag = 0
fileName = ofImageDialog.FileName
Dim fs As FileStream = New FileStream(fileName, FileMode.Open, FileAccess.Read)
iImgLength = fs.Length
Dim arrImageData(iImgLength) As Byte
fs.Read(arrImageData, 0, fs.Length)
fs.Close()
arrImageSave = ConvertFile(arrImageData)
End If
End Sub
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
simg = New Snowbnd
End Sub
Private Sub btnLoadMem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadMem.Click
simg.clearImage()
iImgLength = iImgLength * 4 + 10000
status = simg.CIMGLOW_set_alias(4)
status = simg.CIMG_decompress_bitmap_mem(arrImageSave, 0)
If (status >= 0) Then
Dim sdibHeader As CDIB_HEADER
sdibHeader = New CDIB_HEADER
status = simg.CIMG_bitmap_info(sdibHeader)
If (sdibHeader.biHeight <> 0) Then
panImage.Width = panImage.Height * sdibHeader.biWidth / sdibHeader.biHeight
End If
iLoadedFlag = 1
Refresh()
End If
End Sub
Private Sub panImage_Paint( ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles panImage.Paint
If (status >= 0) And (iLoadedFlag = 1) Then simg.CIMG_display_bitmap(e.Graphics, 0, 0, panImage.Width, panImage.Height)
End Sub
Public Function ConvertFile( ByVal arrOrigFile As Byte()) As Byte()
Dim iPageNumber As Integer, status As Integer
Dim simage As New SbdNetLib.Snowbnd
Dim arrNewfile(5000000) As Byte
‘ Snowbound : declare some new stuff
Dim iSize As Integer
Dim header As New SbdNetLib.CDIB_HEADER
Try
‘sb.Append(Now().ToString & ” – Staring Convert File” & ControlChars.CrLf)
Dim intFiles As Integer = 0
Dim intTotalPages As Double = 0
Dim intArraySize As Integer = 0
‘—CONVERT—‘
Dim strExt As String = “PDF”
‘Dim strFileDes As String = strConvDir
‘strSaveImage = strFileDes & intFiles & “.pdf”
iPageNumber = simage.CIMGLOW_get_pages_mem(arrOrigFile)
status = simage.CIMGLOW_set_document_input(300, 24)
status = simage.CIMG_decompress_bitmap_mem(arrOrigFile, 0)
‘ Snowbound : get header info to determine size of array
simage.CIMG_bitmap_info(header)
iSize = header.biSizeImage * iPageNumber
‘ Snowbound: declare array only as big as needed
ReDim arrNewfile(iSize)
Array.Clear(arrNewfile, 0, iSize)
‘Save first page
intArraySize += simage.CIMG_save_bitmap_mem(arrNewfile, 59)
intTotalPages += iPageNumber
If (iPageNumber < 1) Then iPageNumber = 1
‘Save the rest pages
For i As Integer = 1 To iPageNumber – 1
‘option
‘status = simage.CIMGLOW_set_document_input(300, 24)
status = simage.CIMG_decompress_bitmap_mem(arrOrigFile, i)
intArraySize += simage.CIMG_save_bitmap_mem(arrNewfile, 59)
simage.CIMG_delete_bitmap()
Next i
‘ Snowbound: don’t need this array anymore
‘Dim arrRetrunFile(intArraySize – 1) As Byte
‘For j As Integer = 0 To intArraySize – 1
‘ arrRetrunFile(j) = arrNewfile(j)
‘Next
‘arrNewfile.Copy(arrNewfile, arrRetrunFile, intArraySize – 1)
‘Return arrRetrunFile
‘ Snowbound: return correct array
‘ReDim it as the exact size saved.
ReDim Preserve arrNewfile(intArraySize)
Return arrNewfile
Catch ex As Exception
arrNewfile = Nothing
Throw
Finally
‘arrNewfile = Nothing
‘sb.Append(Now().ToString & ” – Ending Convert File” & ControlChars.CrLf)
End Try
End Function
End Class