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
controlrAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

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.

2266180Commented:
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;

Open in new window

0
controlrAuthor 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
2266180Commented:
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
Fundamentals of JavaScript

Learn the fundamentals of the popular programming language JavaScript so that you can explore the realm of web development.

controlrAuthor 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
Dagan HooverDeveloperCommented:
Uhh like this?

function FileToHex(FileName: String): String;
var
  F : DWORD;
  Buffer : PChar;
  FileSize : DWORD;
  BytesRead : DWORD;
  I : DWORD;
begin
  Result := '';
  F := CreateFile(PChar(FileName),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN);
  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
      ReadFile(F,Buffer^,FileSize,BytesRead,nil);
      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;

Open in new window

0
2266180Commented:
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
Dagan HooverDeveloperCommented:
Opps

F := CreateFile(PChar(FileName),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);


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

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.