Link to home
Start Free TrialLog in
Avatar of controlr
controlrFlag for Israel

asked on

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
Avatar of 2266180
2266180
Flag of United States of America image

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

Avatar of controlr

ASKER

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 :)
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.
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)
Avatar of ThievingSix
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

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)
ASKER CERTIFIED SOLUTION
Avatar of ThievingSix
ThievingSix
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial