PDA

Ver la Versión Completa : Convertir imagen en Array of Byte


jlrdz
28-04-2015, 18:12:47
Saludos y buenos días primero que nada, tengo una duda y ojalá pudieran ayudarme.

Necesito pasar una imagen ya sea que la tenga almacenada en una variable (TBitMap) o componente TImage a un arreglo de bytes (array of byte) que representa el contenido de la imagen, esto para poder enviarla en un documento XML a un web service, ¿alguien ya lo ha hecho antes?

Encontré en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=63985) una respuesta(#18) de Neftali pero como tengo desconocimiento del tema no sé si esto me sirva o sea lo que estoy tratando de hacer.

De antemano gracias y si necesitan más información de mi parte estaré al pendiente.

¡Saludos! :)

duilioisola
28-04-2015, 18:36:07
Supongo que lo que necesitas es codificar la imagen en BASE64 para poder agregarla a tu XML.

Aquí tienes un hilo que muestra el código para hacer eso en el mensaje número 4:
http://www.clubdelphi.com/foros/showthread.php?t=48924&highlight=base64

jlrdz
28-04-2015, 19:03:19
Supongo que lo que necesitas es codificar la imagen en BASE64 para poder agregarla a tu XML.

Aquí tienes un hilo que muestra el código para hacer eso en el mensaje número 4:
http://www.clubdelphi.com/foros/showthread.php?t=48924&highlight=base64

Muchas gracias amigo por tu respuesta, lo intentaré de esa forma y daré respuesta.

Saludos!

jhonny
29-04-2015, 03:41:40
Bueno, quizá también sirva echarle ojo a este post...

http://www.clubdelphi.com/foros/showpost.php?p=490290&postcount=4

Que viene siendo al revés pero apuesto que una pista interesante se encuentra ahí.

jlrdz
04-05-2015, 16:47:56
Gracias a todos por sus respuestas y el tiempo que se tomaron en ayudarme, a fin de cuentas el archivo que me generó la importación de wsdl solicitaba que el archivo se pasara como TByteDynArray, aquí les dejaré la función que me ayudó a resolver dicho problema por si alguien más lleva a pasar por lo mismo.

Saludos.


function TForm1.FIleToByteArray(const FileName: string): TByteDynArray;
const BLOCK_SIZE=1024;
var BytesRead, BytesToWrite, Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Reset(F);
try
Count := FileSize( F );
SetLength(Result, Count );
pTemp := @Result[0];
BytesRead := BLOCK_SIZE;
while (BytesRead = BLOCK_SIZE ) do
begin
BytesToWrite := Min(Count, BLOCK_SIZE);
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
Count := Count-BytesRead;
end;
finally
CloseFile( F );
end;
end;


Así se manda llamar...

var nImagenArray :TByteDynArray;
begin
...
nImagenArray := FileToByteArray('c:\rutaimagenejemplo.jpg');
...
end;