Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Conversion de BMP a JPG (https://www.clubdelphi.com/foros/showthread.php?t=18441)

sierraja 12-02-2005 00:04:23

Conversion de BMP a JPG
 
:confused: 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)

roman 12-02-2005 01:52:48

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

sierraja 12-02-2005 02:13:08

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....

roman 12-02-2005 02:26:15

¿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

sierraja 12-02-2005 02:39:57

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

sierraja 12-02-2005 15:23:01

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

roman 12-02-2005 20:42:28

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

sierraja 03-03-2005 23:40:41

El error contínua
 
Hermano Roman, todavía continuo con el error. Tu recomendación del uses unit también está corregida. :confused: :confused: Me pregunto cual es el error. He realizado varias pruebas pero me da vuelta la cabeza. Gracias.....

Alfredo 04-03-2005 15:49:36

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.

sierraja 14-03-2005 13:41:03

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.

<Sergio> 14-03-2005 19:21:23

Y que tal en un proyecto nuevo y mejor si reinstalas delphi.:rolleyes:

Alfredo 14-03-2005 20:19:01

Cita:

Empezado por <Sergio>
Y que tal en un proyecto nuevo y mejor si reinstalas delphi.:rolleyes:

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. :)

sierraja 15-03-2005 20:06:38

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.:confused:

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.

sierraja 16-03-2005 15:55:46

Echarle Lupa
 
A todos, quien me puede ayudar :confused:


La franja horaria es GMT +2. Ahora son las 20:26:45.

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