Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Alguien me ayuda con los streams? (https://www.clubdelphi.com/foros/showthread.php?t=55623)

mrnovice 22-04-2008 16:10:20

Alguien me ayuda con los streams?
 
Saludos,primero que nada agradezco cada día que me ayudan, lo que pasa es que yo que yo adquiero imágenes por medio del escáner, pero no se cómo meterlos a un formato stream por así decir, alguien me pudiera recomendar algún tutorial para conocer mejor los streams en Delphi, porfavor, ó pudiera ser còmo pasar un Tbitmpa a un Tstream :o

santus 22-04-2008 19:33:02

Holas. Mira, ami tambien me tocó hacer algo parecido. Es cuestion de ver exactamente que quieres hacer con un stream.

Aca en el foro con el buscardor puedes encontrar un monton de soluciones.

Te dejo lo que hice yo. Capaz que te puede ayudar. Tome la ayuda de Seoane en que se trataba de como guardar una imagen. Aqui el Link.

Luego lo cambie por esto:

Código Delphi [-]
 
uses jpeg;//procedure Capturar(Filename: string; Panel: TPanel);funcion Capturar(Filename: string; Panel: TPanel): TStream;var  SrcWindow: THandle;  SrcDC: HDC;  Bitmap: TBitmap;  Jpg: TJPEGImage;  stream : Tstream;begin  SrcWindow:= Panel.Handle;  if SrcWindow <> 0 then  begin    SrcDC:= GetDC(SrcWindow);    if SrcDC <> 0 then    begin      Bitmap:= TBitmap.Create;      Jpg:= TJPEGImage.Create;      stream := TMemoryStream.Create;      try        Bitmap.Width:= Panel.Width;        Bitmap.Height:= Panel.Height;        BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,SrcDC,0,0,SRCCOPY);        Jpg.CompressionQuality:= 60;        Jpg.Assign(Bitmap);        //Jpg.SaveToFile(Filename); Aqui lo comento y en vez de guardarlo a un archivo lo guardo a un stream.        Jpg.SaveToStream(stream);      finally        Bitmap.Free;        Jpg.Free;        ReleaseDC(SrcWindow,SrcDC);      end;    end;  end;end;// Ejemplo de como usar la funcionMiStream:=Capturar('c:\1.jpg',Panel1);

Y listo. Ya tienes la imagen en un stream. Despues si lo quieres guardar en una base de datos, tal vez quieras ver este link. El maestro Delphi.com.ar respondio muchisimos mensajes sobre stream. Capáz que él te podra dar una mano mas en profundidad.

Espero haberte sido de ayuda. No siempre la pego respondiendo mensajitos, pero bue.. son ideas.

Muchos saluditos.

santus 22-04-2008 19:44:48

Lo copio de nuevo porque nose que paso:


Código Delphi [-]
uses jpeg;

//procedure Capturar(Filename: string; Panel: TPanel);
funcion Capturar(Filename: string; Panel: TPanel): TStream;
var SrcWindow: THandle;
SrcDC: HDC;
Bitmap: TBitmap;
Jpg: TJPEGImage;
stream : Tstream;
begin
SrcWindow:= Panel.Handle;
if SrcWindow <> 0 then
begin
SrcDC:= GetDC(SrcWindow);
if SrcDC <> 0 then
begin
Bitmap:= TBitmap.Create;
Jpg:= TJPEGImage.Create;
stream := TMemoryStream.Create;
try
Bitmap.Width:= Panel.Width;
Bitmap.Height:= Panel.Height;
BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,
Bitmap.Height,SrcDC,0,0,SRCCOPY);
Jpg.CompressionQuality:= 60;
Jpg.Assign(Bitmap);
//Jpg.SaveToFile(Filename); Aqui lo comento y en vez de guardarlo a un archivo lo guardo a un stream.
Jpg.SaveToStream(stream);
finally
Bitmap.Free;
Jpg.Free;
ReleaseDC(SrcWindow,SrcDC);
end;
end;
Result:=stream;
end;

// Ejemplo de como usar la funcion
MiStream:=Capturar('c:\1.jpg',Panel1);

mrnovice 22-04-2008 20:35:50

Agradecimiento
 
Muchas gracias ya estoy analizandolo,en cuanto tenga un resultado te lo notifico, me hes de mucha ayuda me dejastes sin palabras:) saludos

mrnovice 23-04-2008 20:42:27

ya funcionó
 
Saludos, ya me funcionó muchs gracias,cualquier duda avisenme,aunque hay algo que necesito verificar cuando cambio el tamaño con la VCL Vampyre Imaging Library al usar resizeImage,(Lo hago para realizar los thumbnails <con jvthumbview>) se tarda en cargar las imagenes stream obtenidas del bitmap obtenido por el escáner ,.es normal?, se puede optimizar?... ejej:)
saludos.

santus 23-04-2008 23:22:27

Cita:

Empezado por mrnovice (Mensaje 282065)
Saludos, ya me funcionó muchs gracias,cualquier duda avisenme,aunque hay algo que necesito verificar cuando cambio el tamaño con la VCL Vampyre Imaging Library al usar resizeImage,(Lo hago para realizar los thumbnails <con jvthumbview>) se tarda en cargar las imagenes stream obtenidas del bitmap obtenido por el escáner ,.es normal?, se puede optimizar?... ejej:)
saludos.

Me alegro entonces que todo marche bien. Parece que estamos haciendo proyectos parecidos, ya que yo tambien me encuentro con tus mismos problemas ;) ..
La verdad que no conozco esa libreria Vampyre (causa gracia el nombre, jejeje).. Si lo que quieres es hacer un redimesionado del tamaño de la imagen, ya se ha tratado muchas veces aqui, y la verdad que ami me funciono muy bien que incluso se adapta muy bien a la solucion anterior. El secreto esta en el TBitmap.Canvas.StretchDraw

Mira este hilo y quiza tambien algo mas completo, mira este truco.

Suerte en tu proyecto.:)

mrnovice 24-04-2008 03:39:35

Saludos
 
holas, jejej, pues que bueno, porque nos podemos apoyar en las áreas que no entendamos :), voy a intentar este método ojala sea más rapidos.
Sobre la V.I.L. es un vcl enfocado a gráficos y creo es bueno, creo a dec y a mamu les resulto muy bien jojo deja te paso l link para que o cheques tal vez te sea de utilidad dale click aquí oye a lo mejor no es tan rápido porque no use los stream en una bd, pudiera ser? saludos suerte igualmente con tu proyecto :)

santus 24-04-2008 15:42:13

Excelente!!, no sabia de la existencia de la VIL.. parece muyy completa en lo que a graficos se refiere!!... Voy a probarla a ver si realmente es tan buena como parece ;) ..

respecto a la lentitud, la verdad que no te sabría decir el porque de la situación. No creo que tenga algo que ver que no uses los streams en la db.

Te recomiendo que habras un nuevo hilo en OOP y pegues ahí todo el procedimiento. Seguramente Dec y compañia te van a asesorar en donde podrías mejorar tu código.

Muchos saludos.

mrnovice 25-04-2008 16:38:46

saludos
 
Pues ya lo puse n_n,haber si se logra, de todas maneras para que lo cheques si gustas, en teoria no debio haber alentado el proceso pero pues quien sabe.
Aquí esta el link.
Saludos.


La franja horaria es GMT +2. Ahora son las 06:37:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi