PDA

Ver la Versión Completa : Obtener el valor de la propiedad Width y Hignt


bulc
02-07-2018, 20:04:05
Deseo cambiar un TDBImage, posicionándolo como vertical (Portrait) u horizontal (Marine) según que el ancho (Width) sea mayor o menor que el alto (Hight).
Usaría el Evento onDataChange del DataSource para que evalúe dichas propiedades y se muestre del modo correcto. Lo sé hacer con un CheckBox a la vista del gráfico.
Mi pregunta es:
¿Cuál es la mejor manera de obtener el valor de esa propiedad? Probaré con Modulo1.FDQuery2.FieldByName('foto').... pero ahí tropiezo y no sé seguir. ¿Debo usar un formato Picture?
Saludos,
bulc

ecfisa
02-07-2018, 21:13:56
Hola.

Una opcion para obtener los valores del ancho y alto de la imágen almacenada en el campo 'FOTO' es:

function ImageFieldWidthHeight(aField: TField): TPoint;
var
BF: TBlobField;
GR: TGraphic;
FS: Word;
st: string;
begin
BF := TBlobField(aField);
// obtener signature de la imágen
CopyMemory(@FS, @BF.Value[1], SizeOf(FS));
st := IntToHex(FS, 4);

GR := TGraphic.Create;
try
if st = '4D42' then GR := TBitmap.Create
else if st = 'D8FF' then GR := TJPEGImage.Create
else if st = '0000' then GR := TIcon.Create
// else if st = ... etc, etc
else raise Exception.Create('Formato de imágen no soportado');
GR.Assign(BF);
Result := Point(GR.Width, GR.Height);
finally
GR.Free;
end;
end;


Uso:

...
var
p: TPoint;
begin
p := ImageFieldWidthHeight(Query.FieldByName('FOTO'));
ShowMessageFmt('Width:%5d%sHeight:%5d', [p.X, #10, p.Y]);
...


Saludos :)