I was thinking on a type of encription that would convet a document to an image and the convert it back, but I found three problems.
If I read bytes as boolean from my document, then most of the image wold be white, because any non zero byte would be considered as true. The other way was to use the 'bits' that form the byte, but now I have too many to construct a pixel of any color, this is the second problem. I need to create 3 colors from every byte and it would multipy my file size for 3. The third problem was that I had to fill the balance of the rectangle with white or black values, because the documents don't have a "n x n" or "n x m" array of characters, and this balance would appear as a stip on top of the image, remember that "y" grows down and this could be a clue to decipher the encoding. So I have to find another way, we will see.
On the mean time, I made a function to make the image from the array. So I have this small program that will create a "granite" bitmap at clicking on the color picker cube.
It creates a bitmap sized with the indexes of the array (elements(x,y)) and sets the corresponding pixel's color with the color chosen ("getPixel"), by means of ("SetPixel"). Color for "True", white for "False".
This is a one to one bitmap, but you could double the size of the bitmat and set the bitmap coloring to 2x2 pixel square with the same color.
Here is the code.
Imports System.Drawing.Imaging Imports System.Drawing.Drawing2D Public Class Form1 Dim Cx(100, 100) As Boolean Dim Span As Integer Dim PickedColor As Color = Color.Black Private Function CreateBmp(ByRef Mx(,) As Boolean, ByVal Stride As Integer) As Image Dim Height As Integer Height = Mx.Length \ Span Dim Patn As New Bitmap(Stride, Height) For g As Integer = 0 To Height - 2 For f As Integer = 0 To Stride - 1 If Mx(f, g) = True Then Patn.SetPixel(f, g, Color.White) Else Patn.SetPixel(f, g, PickedColor) End If Next Next Return Patn End Function
The values on the array are generated at random, so it gives a random image, always changing with every click:
Public Function RandomValue(ByVal low As Integer, ByVal high As Integer) As Boolean Static Random1 As New Random If Random1.Next(low, high + 1) Mod 2 = 0 Then Return False Else Return True End If End Function
If you want to save the generated image, you could use it as a background for a webpage or for any control that can show graphics:
Private Sub btnSaveImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveImage.Click Dim i As Integer Dim str As String = "" For i = 1 To 1000 If i < 10 Then str = "Picture_00" & i.ToString & ".jpg" If i > 9 And i < 100 Then str = "Picture_0" & i.ToString & ".jpg" If i > 99 Then str = "Picture_" & i.ToString & ".jpg" If i > 900 Then MsgBox("You Have Over 900 Pictures, Please Check And Delete Unnecesary Ones") If Not System.IO.File.Exists(str) Then Try pbResult.Image.Save(str, System.Drawing.Imaging.ImageFormat.Jpeg) Catch Ex As Exception MsgBox("Could Not Write To Location") End Try Exit For End If Next End Sub
The color can come by any means that you like, I did chose a color picker image. When you click on it, the color under the pointer is saved on "PickedColor", a color variable set at the beginning of the program.
Private Sub pbColor_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pbColor.MouseClick Dim bmp As New Bitmap(pbColor.Image) PickedColor = bmp.GetPixel(e.X, e.Y) For m As Integer = 0 To N1.Value - 1 For n As Integer = 0 To N1.Value - 1 Cx(m, n) = RandomValue(0, 1) 'For True Or False Values Next Next pbResult.Image = CreateBmp(Cx, Span) End Sub
If we want to change te size of the array and corresponding image size you would use the numeric up-down "N1", this will 'redim' the array and change the counters for the loops to set the pixels. The second picturebox is set to "Autosize", so it will change dimensions to adjust itself to the bitmap.
Private Sub N1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles N1.ValueChanged ReDim Cx(N1.Value, N1.Value) Span = N1.Value + 1 End Sub
That simple. If you want something more complex, check some of my other contributions.
There is an attached project.
Create Bitmap.zip (69.23K)
Number of downloads: 571