Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Question Conversion de BMP a JPG

Amigos, por favor necesito convertir ficheros BMP a JPG he utilizado una rutina que circula por alli pero no me funciona. Y para los que conocen la rutina se ubicaran cuando les indique que el error me da cuando llega a la linea bmp.canvas.draw(0,0,jpg). Me dice que los tipos son distintos. Por favor necesito que me ayuden. Gracias Adolfo Sierra (sierraja2000@yahoo.com)
Responder Con Cita
  #2  
Antiguo 12-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues no dejas mucho rango para ayudarte. Si pones la rutina o mencionas de dónde la sacaste quizá alguien pueda determinar en qué falla.

// Saludos
Responder Con Cita
  #3  
Antiguo 12-02-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Hermano disculpa, tienes razón, pensé que conocías la siguiente rutina:

procedure TForm1.Button2Click(Sender: TObject);
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
{ Convert a JPEG to a BMP }
MyJPEG := TJPEGImage.Create;
with MyJPEG do begin
LoadFromFile('YourJpegHere.JPEG');
MyBMP := TBitmap.Create;
with MyBMP do begin
Width := MyJPEG.Width;
Height := MyJPEG.Height;
Canvas.Draw(0,0,MyJPEG); ////aqui es donde me da el error/////
SaveToFile('YourBmpHere.BMP');
Free;
end;
Free;
end;
end;

Esta rutina aparece en varios foros y paginas que he consultado. Sólo quiero convertir un jpg a bmp para luego almacenarlo en un campo Blob de interbase posteriormente. Hermano de antemano gracias por tu atención....
Responder Con Cita
  #4  
Antiguo 12-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y ésta no te sirve?

Código Delphi [-]
var
  JPeg: TJpegImage;
  Bitmap: TBitmap;

begin
  JPeg := TJPegImage.Create;
  JPeg.LoadFromFile('hands.jpg');

  Bitmap := TBitmap.Create;
  Bitmap.Assign(JPeg);
  Bitmap.SaveToFile('hand.bmp');

  JPeg.Free;
  Bitmap.Free;

// Saludos
Responder Con Cita
  #5  
Antiguo 12-02-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
El Error continua

El error continua y aparece en la linea:

Bitmap.Assign(jpg);

Y el error que aparece es:

Cannot assign a TJPEGImage to TBitmap.


EL codigo está tal y cual tu lo escribiste. Gracias
Responder Con Cita
  #6  
Antiguo 12-02-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
El error continua...

El error continua y aparece en la linea:

Bitmap.Assign(jpg);

Y el error que aparece es:

Cannot assign a TJPEGImage to TBitmap.


EL codigo está tal y cual tu lo escribiste. Gracias
Responder Con Cita
  #7  
Antiguo 12-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues es muy raro, el código que puse lo copié tal cual de la prueba que hice y funcionó bien. Por el error que te marca tal pareciera que no estuvieras usando la unidad Jpeg de Delphi (el error significa que la clase TJPegImage no define el método AssignTo) o quizá tu versión aún no lo maneja. Yo lo he probado en Delphi 7.

// Saludos
Responder Con Cita
  #8  
Antiguo 04-03-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Unhappy El error contínua

Hermano Roman, todavía continuo con el error. Tu recomendación del uses unit también está corregida. Me pregunto cual es el error. He realizado varias pruebas pero me da vuelta la cabeza. Gracias.....
Responder Con Cita
  #9  
Antiguo 04-03-2005
Alfredo Alfredo is offline
Miembro
 
Registrado: nov 2003
Ubicación: Valencia, Venezuela
Posts: 234
Poder: 21
Alfredo Va por buen camino
sierraja:

En delphi 7 me funciono muy bien el primer codigo...

Que version de delphi usas? y que maquina tienes? Que tan grande es la imagen a convertir?. Si me la envias puedo hacer la prueba.
__________________
if Vivir = Vivir + Aprender then Aprender = ?
Alfredo Borges
Responder Con Cita
  #10  
Antiguo 14-03-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
El error continua...

Gracias por tu atención:
Versión de Delphi= 6.0 Delphi Enterprise
S.O.=Windows 2000 SP4
Máquina: procesador x86 (pentium III) 260Kb RAM
Tamaño de la imagen= 6k

Hermano he realizado cualquier prueba y siempre se me cae en lo mismo. De antemano muchas gracias por tu atención.
Responder Con Cita
  #11  
Antiguo 14-03-2005
<Sergio> <Sergio> is offline
Miembro
 
Registrado: sep 2004
Posts: 72
Poder: 20
<Sergio> Va por buen camino
Y que tal en un proyecto nuevo y mejor si reinstalas delphi.
Responder Con Cita
  #12  
Antiguo 14-03-2005
Alfredo Alfredo is offline
Miembro
 
Registrado: nov 2003
Ubicación: Valencia, Venezuela
Posts: 234
Poder: 21
Alfredo Va por buen camino
Cita:
Empezado por <Sergio>
Y que tal en un proyecto nuevo y mejor si reinstalas delphi.
Tiene logica. Si el codigo presentado te funciona bien pegandolo en una placacion nueva, puede ser que algo de tu propio codigo, nose ... quiza una variable, constante u otra cosa, te este perturbando. intentalo a ver.. sino como te comente antes puedes enviarme la imagen en cuestion para hacer la prueba.
__________________
if Vivir = Vivir + Aprender then Aprender = ?
Alfredo Borges
Responder Con Cita
  #13  
Antiguo 15-03-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Echarle Lupa

Gracias por su atencion.

Realmente he hecho muchas preguntas y he tratado de realizar cualquier cosa que se me ocurra a mi y otras personas y no he tenido resultados favorables, intentaremos de nuevo. La necesidad que tengo es almacenar en un archivo db.gdb (interbase, campo blob) una imagen proveniente de BMP y/o JPG, pero tengo problemas para pasar una imagen de jpg a bmp y no he podido, al principio del foro esta una rutina pero no me funciona. Recientemente encontré una rutina que te anexo al final, donde lee archivos bmp y jpg y los almacena en un archivo gdb y en un campo blob. Esta rutina la ejecuto en mi computador y me funcionan, es màs, la pego en mi proyecto y funciona, trato de desmembrarla para aplicarla a mi proyecto y no encuentro el momento en que se graba en la base de datos, puede ser por falta de conocimiento del funcionamiento de la funcion o simplemente no la veo. Por tal motivo, me veo en la necesidad de enviarte el fuente y esperando cualquier tipo de ayuda.

Adolfo Sierra
Venezuela

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Jpeg, ExtDlgs, ExtCtrls, Menus, DBCtrls, DB, IBCustomDataSet,
  IBDatabase, StdCtrls, Grids, DBGrids;

type
  TGraphType = (gtBitmap, gtIcon, gtMetafile, gtJpeg);
  TForm1 = class(TForm)
    IBDB: TIBDatabase;
    IBT: TIBTransaction;
    DSImagenes: TDataSource;
    PMImagenes: TPopupMenu;
    Load1: TMenuItem;
    Clear1: TMenuItem;
    ImageFoto: TImage;
    dlgOpenPicture: TOpenPictureDialog;
    DBGrid1: TDBGrid;
    IBDSImagenes: TIBDataSet;
    IBDSImagenesCODIGO: TIntegerField;
    IBDSImagenesNOMBRE: TIBStringField;
    IBDSImagenesFOTO: TBlobField;
    IBDSImagenesFORMATO: TIBStringField;
    Bevel1: TBevel;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Load1Click(Sender: TObject);
    procedure Clear1Click(Sender: TObject);
    procedure DSImagenesDataChange(Sender: TObject; Field: TField);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //abrir basedatos, transación, tabla
  IBDB.DatabaseName := ExtractFilePath(ExpandFileName(ParamStr(0))) + 'IMAGENES.GDB';
  IBDB.Open;
  IBT.Active := True;
  IBDSImagenes.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //cerrar basedatos
  IBDB.Close;
end;

//cargar imagen (popupmenu en cuadro)
procedure TForm1.Load1Click(Sender: TObject);
var
  m, f: TStream;
  s: string;
begin
  //se abre picturedialog para cargar fichero foto que se coja
  if dlgOpenPicture.Execute then
    begin
      //modo edición
      IBDSImagenes.Edit;
      //stream a partir campo Blob que contendrá la imagen
      m:= IBDSImagenes.CreateBlobStream(IBDSImagenesFOTO, bmWrite);
      //stream para acceder al archivo gráfico
      f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
      //copiar de un stream a otro
      m.CopyFrom(f, f.Size);
      //coger formato foto y ponerlo en campo correspondiente
      s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
      if s='.JPEG' then
        s:= '.JPG';
      IBDSImagenesFORMATO.AsString:= Copy(s,2,3);
      IBDSImagenes.Post;
      //destruir streams
      f.Free;
      m.Free;
    end
end;

//borrar imagen (popupmenu en cuadro)
procedure TForm1.Clear1Click(Sender: TObject);
begin
  //borrar imangen (cuadro)
  ImageFoto.Picture.Assign(nil);
  //borrar imagen del campo blob
  if (IBDSImagenes.State <> dsEdit) and (IBDSImagenes.State <> dsInsert) then
    IBDSImagenes.Edit;
  IBDSImagenesFOTO.Assign(nil);
  IBDSImagenes.Post;
end;

//mostrar imagen (evento ondatachange de datasource)
procedure TForm1.DSImagenesDataChange(Sender: TObject; Field: TField);
var
  m: TStream;
begin
if IBDSImagenesFOTO.IsNull then
    //para registros sin imagen poner imagen vacia
    ImageFoto.Picture := nil
  else
    begin
      if IBDSImagenesFORMATO.AsString = 'BMP' then
          //si es formato BMP
          ImageFoto.Picture.Graphic:= TBitmap.Create
      else if IBDSImagenesFORMATO.AsString = 'JPG' then
          //si es formato JPG
          ImageFoto.Picture.Graphic:= TJpegImage.Create
      else
        Exit;
      //copiar los datos desde la tabla con un stream
      m:= IBDSImagenes.CreateBlobStream(IBDSImagenesFOTO, bmRead);
      ImageFoto.Picture.Graphic.LoadFromStream(m);
      m.Free;
    end;
end;

end.

Última edición por roman fecha: 15-03-2005 a las 22:51:17. Razón: agregar etiquetas [delphi] para mayor legibilidad
Responder Con Cita
  #14  
Antiguo 16-03-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Echarle Lupa

A todos, quien me puede ayudar
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:33:01.


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