# image to hex and hex to image

hello experts!
can someone help me with converting image to hexadecimal and hexadecimal to image?
like at the .dfm..

thanks
###### Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
it's not exactly hex. it's some coding, like base64. see attached code.
``````// following 2 functions taken from http://www.swissdelphicenter.ch/en/showcode.php?id=1524
const
Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';

function Encode64(S: string): string;
var
i: longint;
a: Integer;
x: Integer;
b: Integer;
begin
Result := '';
a := 0;
b := 0;
for i := 1 to Length(s) do
begin
x := Ord(s[i]);
b := b * 256 + x;
a := a + 8;
while a >= 6 do
begin
a := a - 6;
x := b div (1 shl a);
b := b mod (1 shl a);
Result := Result + Codes64[x + 1];
end;
end;
if a > 0 then
begin
x := b shl (6 - a);
Result := Result + Codes64[x + 1];
end;
end;

function Decode64(S: string): string;
var
i: longint;
a: Integer;
x: Integer;
b: Integer;
begin
Result := '';
a := 0;
b := 0;
for i := 1 to Length(s) do
begin
x := Pos(s[i], codes64) - 1;
if x >= 0 then
begin
b := b * 64 + x;
a := a + 6;
if a >= 8 then
begin
a := a - 8;
x := b shr a;
b := b mod (1 shl a);
x := x mod 256;
Result := Result + chr(x);
end;
end
else
Exit;
end;
end;
``````
0
Author Commented:
nice but i cant put an image on it :(
i want to convert image to hexdecimal..
put an image on a form (with a pic inside) and save it then open the .dfm file
go to picture.data and you will understand what im looking for.

and thanks for the comment :)
0
Commented:
if you are trying to read from a dfm, why not use the delphi standard component streaming mechanism?

you read up the dfm, extract the image part, save it into a stringstream and then load the timage from it.

is this what you are trying to accomplish? if not, what? because you said "like dfm".  I need to know exactly in order to give exact code.
0
Author Commented:
yeah something like that but i want to do it at the code.
for example:
i have a pick a jpg file with the open dialog
and then in the code i convert it to hexadecimal (all the jpg is now just a big block of numbers)
0
DeveloperCommented:
Uhh like this?
``````
function FileToHex(FileName: String): String;
var
F : DWORD;
Buffer : PChar;
FileSize : DWORD;
I : DWORD;
begin
Result := '';
If F = INVALID_HANDLE_VALUE Then Exit;
Try
FileSize := SetFilePointer(F,0,nil,FILE_END);
If FileSize = 0 Then Exit;
SetFilePointer(F,0,nil,FILE_BEGIN);
Buffer := AllocMem(FileSize);
If Buffer = nil Then Exit;
Try
If BytesRead <> FileSize Then Exit;
For I := 0 To BytesRead Do
begin
Result := Result + IntToHex(Byte(Buffer^),2);
Inc(Buffer);
end;
Finally
FreeMem(Buffer);
end;
Finally
CloseHandle(F);
end;
end;
``````
0
Commented:
and what do you do with that "hexadecimal" string? (because I have the feeeling that you don't really want that delphi streaming thing, but that base64 thing I posted earlier)
0
DeveloperCommented:
Opps

and

For I := 0 To BytesRead - 1 Do
begin
Result := Result + IntToHex(Byte(Buffer[I]),2);
end;
0

Experts Exchange Solution brought to you by