Jump to content

Hoja de contactos en Word


Comandante
 Compartir

Publicaciones recomendadas

Hola

No sabía donde poner este post, asi que lo comienzo aquí y si no tiene interés, pues que se quede aquí tb.

 

No se cuanto uso haceis de las hojas de contactos y como las generais (PS u otros programas).

Soy usuario de PS, pero tb por desgracia programador :) asi que el otro día me aburría por la tarde y me dije:

 

¿Sería útil una pequeña aplicación para windows a la que le indiquemos una carpeta y nos genere una hoja de contactos en word lista para imprimir y/o guardar y/o enviar por correo?

 

Esa es la pregunta que os traslado y si creeis que es interesante os puedo pasar la aplicación o alguna muestra de los documentos generados.

 

Funciona de la siguiente manera, le indicamos la carpeta y nos genera la hoja de contactos de 2 posibles maneras.

1.- Las imagenes y el nombre en 5 columnas.

2.- En dos columnas, cada imagen con los datos exif al lado.

 

Bueno, espero cualquier comentario, propuesta, petición...

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Me parece una buena idea.

De hecho yo ya abrí un documento Word con varias columnas y filas y voy pasando la información que particularmente me interesa. Es muy práctico porque mediante el busca te situas en el lugar que te interesa. No sé si te refieres a esto, más o menos.

Enlace al comentario
Compartir en otros sitios web

Hola Anna

 

Te comento, mi idea es hacer algo así:

 

hojacontactos.jpg

 

Uploaded with ImageShack.us

 

La parte de arriba sería un documento con cada imagen y los datos exif al lado (en la imagen solo tiene exif la primera foto)

La parte de abajo sería un documento con las imagenes y el nombre.

 

Pero bueno, por eso pregunto... estoy abierto a cualquier propuesta.

 

Por cierto para este ejemplo he usado alguna foto que he sacado de aquí de los foros, espero que nadie se moleste, ya que son miniaturas muy pequeñas, si alguien se molesta, lo evitaré para la proxima vez :) ...

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Buenas....

A mi me interesa principalmente la extracción de los datos EXIF..puedes poner el código por favor??????

 

Gracias por el aporte......

 

Un saludo

 

Hola, aún no puedo poner el codigo porque no esta terminado y falta depurarlo un poco (las cosas o se hacen bien o no se hacen ;)) te pongo este enlace que me sirvió de guía, de hecho si buscas en google veras cien mil maneras de extraer los exif en cualquier lenguaje.

 

http://www.spaz.com/mr/work/aspexiffuncs/

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Hola, aún no puedo poner el codigo porque no esta terminado y falta depurarlo un poco (las cosas o se hacen bien o no se hacen ;)) te pongo este enlace que me sirvió de guía, de hecho si buscas en google veras cien mil maneras de extraer los exif en cualquier lenguaje.

 

http://www.spaz.com/mr/work/aspexiffuncs/

 

un saludo

 

La que utilizo yo..........

 

Contenido de la clase ExifReader.cls

 

Saludos......

 

 

 

Option Explicit

 

Private ExifTemp() As Byte

Private Offset_to_IFD0 As Long

Private Offset_to_APP1 As Long

Private Offset_to_TIFF As Long

Private Length_of_APP1 As Long

Private Offset_to_Next_IFD As Long

Private IFDDirectory() As IFD_Data

Private Offset_to_ExifSubIFD As Long

Private m_Tag As Long

Private m_file As String

Private IsLoaded As Boolean

 

Private Enum EXIF_DATA_FORMAT

m_BYTE = 1

m_STRING = 2

m_SHORT = 3

m_LONG = 4

m_RATIONAL = 5

m_SBYTE = 6

m_UNDEFINED = 7

m_SSHORT = 8

m_SLONG = 9

m_SRATIONAL = 10

m_SINGLE = 11

m_DOUBLE = 12

End Enum

 

Private Type IFD_Data_Values

BytVal As Byte

StrVal As String

IntVal As Integer

LngVal As Long

SngVal As Single

DblVal As Double

End Type

 

Private Type IFD_Data

Tag_No As EXIF_TAG

MakerNote As Boolean

Data_Format As EXIF_DATA_FORMAT

Components As Long

Offset_To_Value As Long

Value As Variant

End Type

 

Public Enum EXIF_TAG

'IFD0 Tags

ImageDescription = &H10E&

Make = &H10F&

Model = &H110&

Orientation = &H112&

XResolution = &H11A&

YResolution = &H11B&

ResolutionUnit = &H128&

Software = &H131&

DateTime = &H132&

WhitePoint = &H13E&

PrimaryChromaticities = &H13F&

YCbCrCoefficients = &H211&

YCbCrPositioning = &H213&

ReferenceBlackWhite = &H214&

Copyright = &H8298&

ExifOffset = &H8769&

'ExifSubIFD Tags

ExposureTime = &H829A&

FNumber = &H829D&

ExposureProgram = &H8822&

ISOSpeedRatings = &H8827&

ExifVersion = &H9000&

DateTimeOriginal = &H9003&

DateTimeDigitized = &H9004&

ComponentsConfiguration = &H9101&

CompressedBitsPerPixel = &H9102&

ShutterSpeedValue = &H9201&

ApertureValue = &H9202&

BrightnessValue = &H9203&

ExposureBiasValue = &H9204&

MaxApertureValue = &H9205&

SubjectDistance = &H9206&

MeteringMode = &H9207&

LightSource = &H9208&

Flash = &H9209&

FocalLength = &H920A&

MakerNote = &H927C&

UserComment = &H9286&

SubsecTime = &H9290&

SubsecTimeOriginal = &H9291&

SubsecTimeDigitized = &H9292&

FlashPixVersion = &HA000&

ColorSpace = &HA001&

ExifImageWidth = &HA002&

ExifImageHeight = &HA003&

RelatedSoundFile = &HA004&

ExifInteroperabilityOffset = &HA005&

FocalPlaneXResolution = &HA20E&

FocalPlaneYResolution = &HA20F&

FocalPlaneResolutionUnit = &HA210&

ExposureIndex = &HA215&

SensingMethod = &HA217&

FileSource = &HA300&

SceneType = &HA301&

CFAPattern = &HA302&

'Interoperability IFD Tags

InteroperabilityIndex = &H1&

InteroperabilityVersion = &H2&

RelatedImageFileFormat = &H1000&

RelatedImageWidth = &H1001&

RelatedImageLength = &H1002&

'IFD1 Tags

ImageWidth = &H100&

ImageHeight = &H101&

BitsPerSample = &H102&

Compression = &H103&

PhotometricInterpretation = &H106&

StripOffsets = &H111&

SamplePerPixel = &H115&

RowsPerStrip = &H116&

StripByteCounts = &H117&

XResolution2 = &H11A&

YResolution2 = &H11B&

PlanarConfiguration = &H11C&

ResolutionUnit2 = &H128&

JPEGInterchangeFormat = &H201&

JPEGInterchangeFormatLength = &H202&

YCbCrCoeffecients = &H211&

YCbCrSubSampling = &H212&

YCbCrPositioning2 = &H213&

ReferenceBlackWhite2 = &H214&

'Misc Tags

NewSubfileType = &HFE&

SubfileType = &HFF&

TransferFunction = &H12D&

Artist = &H13B&

Predictor = &H13D&

TileWidth = &H142&

TileLength = &H143&

TileOffsets = &H144&

TileByteCounts = &H145&

SubIFDs = &H14A&

JPEGTables = &H15B&

CFARepeatPatternDim = &H828D&

CFAPattern2 = &H828E&

BatteryLevel = &H828F&

IPTC_NAA = &H83BB&

InterColorProfile = &H8773&

SpectralSensitivity = &H8824&

GPSInfo = &H8825&

OECF = &H8828&

Interlace = &H8829&

TimeZoneOffset = &H882A&

SelfTimerMode = &H882B&

FlashEnergy = &H920B&

SpatialFrequencyResponse = &H920C&

Noise = &H920D&

ImageNumber = &H9211&

SecurityClassification = &H9212&

ImageHistory = &H9213&

SubjectLocation = &H9214&

ExposureIndex2 = &H9215&

TIFFEPStandardID = &H9216&

FlashEnergy2 = &HA20B&

SpatialFrequencyResponse2 = &HA20C&

SubjectLocation2 = &HA214&

End Enum

 

Public Property Let picFile(picFile As String)

m_file = picFile

End Property

 

Public Property Get MakerNoteTag(Optional ByVal MakerTag As Long) As Variant

If IsLoaded = False Then Exit Property

 

Dim i As Long

 

For i = 1 To UBound(IFDDirectory)

If IFDDirectory(i).Tag_No = MakerTag And IFDDirectory(i).MakerNote = True Then

MakerNoteTag = IFDDirectory(i).Value

Exit For

End If

Next

 

End Property

 

Public Property Get Tag(Optional ByVal ExifTag As EXIF_TAG) As Variant

If IsLoaded = False And m_file <> "" Then

Load (m_file)

ElseIf IsLoaded = False And m_file = "" Then

Exit Property

End If

 

If ExifTag = 0 Then

On Error Resume Next

Tag = UBound(IFDDirectory)

On Error GoTo 0

Exit Property

End If

 

Dim i As Long

 

For i = 1 To UBound(IFDDirectory)

If IFDDirectory(i).Tag_No = ExifTag Then

'IFDDirectory(i).Value = "CACANON"

Tag = IFDDirectory(i).Value

Exit For

End If

Next

 

End Property

 

Public Sub Load(Optional ByVal picFile As String)

If m_file = "" Then

m_file = picFile

If m_file = "" Then

Exit Sub

End If

End If

 

 

 

OpenJPGFile m_file

If InspectJPGFile = False Then

IsLoaded = False

Exit Sub

End If

 

If IsIntel Then

Offset_to_IFD0 = _

ExifTemp(Offset_to_APP1 + 17) * 256& * 256& * 256& + _

ExifTemp(Offset_to_APP1 + 16) * 256& * 256& + _

ExifTemp(Offset_to_APP1 + 15) * 256& + _

ExifTemp(Offset_to_APP1 + 14)

Else

Offset_to_IFD0 = _

ExifTemp(Offset_to_APP1 + 14) * 256& * 256& * 256& + _

ExifTemp(Offset_to_APP1 + 15) * 256& * 256& + _

ExifTemp(Offset_to_APP1 + 16) * 256& + _

ExifTemp(Offset_to_APP1 + 17)

End If

 

'Debug.Print "Offset_to_IFD0: " & Offset_to_IFD0

IsLoaded = True

GetDirectoryEntries Offset_to_TIFF + Offset_to_IFD0

 

End Sub

 

Private Function OpenJPGFile(ByVal inFile As String)

 

Dim fFile As Integer

 

fFile = FreeFile

 

Open inFile For Binary As #fFile

ReDim ExifTemp(LOF(fFile)) As Byte

Get #fFile, , ExifTemp

Close #fFile

 

End Function

 

Private Function InspectJPGFile() As Boolean

 

Dim i As Long

 

If ExifTemp(0) <> &HFF And ExifTemp(1) <> &HD8 Then

InspectJPGFile = False

Else

 

For i = 2 To UBound(ExifTemp) - 1

If ExifTemp(i) = &HFF And ExifTemp(i + 1) = &HE1 Then

Offset_to_APP1 = i

Exit For

End If

Next

 

If Offset_to_APP1 = 0 Then

InspectJPGFile = False

End If

 

Offset_to_TIFF = Offset_to_APP1 + 10

 

Length_of_APP1 = _

ExifTemp(Offset_to_APP1 + 2) * 256& + _

ExifTemp(Offset_to_APP1 + 3)

 

If Chr(ExifTemp(Offset_to_APP1 + 4)) & Chr(ExifTemp(Offset_to_APP1 + 5)) & _

Chr(ExifTemp(Offset_to_APP1 + 6)) & Chr(ExifTemp(Offset_to_APP1 + 7)) <> "Exif" Then

InspectJPGFile = False

Exit Function

End If

 

InspectJPGFile = True

 

End If

 

End Function

 

Private Function IsIntel() As Boolean

 

If Hex(ExifTemp(Offset_to_TIFF)) = "49" Then

IsIntel = True

Else

IsIntel = False

End If

 

End Function

 

Private Function sPad(sSrc As String, nSize As Integer, sPadChar As String) As String

 

If Len(sSrc) < nSize Then

sPad = String(nSize - Len(sSrc), sPadChar) & sSrc

Else

sPad = sSrc

End If

 

End Function

 

Private Sub GetDirectoryEntries(Offset As Long)

 

Dim No_of_Entries As Long

Dim Upper_IFDDirectory As Long

Dim NewDimensions As Long

Dim Processed_ExifSubIFD As Boolean

Dim BytesPerComponent As Long

Dim Offset_to_MakerNote As Long

Dim i As Long, j As Long

 

Do

If IsIntel Then

No_of_Entries = _

ExifTemp(Offset + 1) * 256& + _

ExifTemp(Offset + 0)

Else

No_of_Entries = _

ExifTemp(Offset + 0) * 256& + _

ExifTemp(Offset + 1)

End If

 

On Error Resume Next

Upper_IFDDirectory = UBound(IFDDirectory)

On Error GoTo 0

 

NewDimensions = Upper_IFDDirectory + No_of_Entries

 

ReDim Preserve IFDDirectory(1 To NewDimensions) As IFD_Data

 

For i = 1 To No_of_Entries

 

With IFDDirectory(Upper_IFDDirectory + i)

 

If IsIntel Then

 

.Tag_No = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 0)

 

.Data_Format = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 2)

 

.Components = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 4)

 

Select Case .Data_Format

 

Case m_BYTE, m_SBYTE

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0")

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_STRING, m_UNDEFINED

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 2

.Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))

Next

End If

 

Case m_SHORT, m_SSHORT

BytesPerComponent = 2

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

'.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_LONG, m_SLONG

BytesPerComponent = 4

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_RATIONAL, m_SRATIONAL

BytesPerComponent = 8

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

.Value = _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _

"/" & _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4)

 

End Select

 

Else

 

.Tag_No = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 1)

 

.Data_Format = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 3)

 

.Components = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 7)

 

Select Case .Data_Format

 

Case m_BYTE, m_SBYTE

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0")

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_STRING, m_UNDEFINED

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))

Next

End If

 

Case m_SHORT, m_SSHORT

BytesPerComponent = 2

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = .Components - 1 To 0 Step -1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_LONG, m_SLONG

BytesPerComponent = 4

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_RATIONAL, m_SRATIONAL

BytesPerComponent = 8

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

.Value = _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _

"/" & _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7)

 

End Select

 

End If

 

'Debug.Print Upper_IFDDirectory + i & ".Tag_No: " & .Tag_No & _

"; .Data_Format: " & .Data_Format & _

"; .Components: " & .Components & _

"; .Offset_To_Value: " & .Offset_To_Value & _

"; .Value: " & .Value

If .Tag_No = MakerNote Then

Offset_to_MakerNote = .Offset_To_Value

End If

If .Tag_No = ExifOffset Then

Offset_to_ExifSubIFD = CLng(.Value)

'Debug.Print "Offset_to_ExifSubIFD: " & Offset_to_ExifSubIFD

End If

 

End With

 

Next

 

If IsIntel Then

If Not Processed_ExifSubIFD Then

Offset_to_Next_IFD = _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3) * 256& * 256& * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0)

'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD

Else

Offset_to_Next_IFD = 0

End If

Else

If Not Processed_ExifSubIFD Then

Offset_to_Next_IFD = _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0) * 256& * 256& * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& + _

ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3)

'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD

Else

Offset_to_Next_IFD = 0

End If

End If

 

If Offset_to_Next_IFD = 0 And Processed_ExifSubIFD = False Then

Offset_to_Next_IFD = Offset_to_ExifSubIFD

Processed_ExifSubIFD = True

End If

 

Offset = Offset_to_TIFF + Offset_to_Next_IFD

 

Loop While Offset_to_Next_IFD <> 0

 

'If Offset_to_MakerNote <> 0 Then

'ProcessMakerNote Offset_to_MakerNote + Offset_to_TIFF

'End If

 

End Sub

 

Private Sub ProcessMakerNote(ByVal Offset As Long)

Dim No_of_Entries As Long

Dim Upper_IFDDirectory As Long

Dim NewDimensions As Long

Dim BytesPerComponent As Long

Dim i As Long, j As Long

 

If IsIntel Then

No_of_Entries = _

ExifTemp(Offset + 1) * 256& + _

ExifTemp(Offset + 0)

Else

No_of_Entries = _

ExifTemp(Offset + 0) * 256& + _

ExifTemp(Offset + 1)

End If

 

On Error Resume Next

Upper_IFDDirectory = UBound(IFDDirectory)

On Error GoTo 0

 

NewDimensions = Upper_IFDDirectory + No_of_Entries

 

ReDim Preserve IFDDirectory(1 To NewDimensions) As IFD_Data

 

For i = 1 To No_of_Entries

 

With IFDDirectory(Upper_IFDDirectory + i)

 

If IsIntel Then

 

.Tag_No = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 0)

 

.MakerNote = True

 

.Data_Format = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 2)

 

.Components = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 4)

 

Select Case .Data_Format

 

Case m_BYTE, m_SBYTE

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0")

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_STRING, m_UNDEFINED

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 2

.Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))

Next

End If

 

Case m_SHORT, m_SSHORT

BytesPerComponent = 2

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

'.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_LONG, m_SLONG

BytesPerComponent = 4

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_RATIONAL, m_SRATIONAL

BytesPerComponent = 8

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)

.Value = _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _

"/" & _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4)

 

End Select

 

Else

 

.Tag_No = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 1)

 

.Data_Format = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 3)

 

.Components = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 7)

 

Select Case .Data_Format

 

Case m_BYTE, m_SBYTE

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _

sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0")

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_STRING, m_UNDEFINED

BytesPerComponent = 1

If .Components * BytesPerComponent <= 4 Then

.Value = _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _

Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))

Next

End If

 

Case m_SHORT, m_SSHORT

BytesPerComponent = 2

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = .Components - 1 To 0 Step -1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_LONG, m_SLONG

BytesPerComponent = 4

If .Components * BytesPerComponent <= 4 Then

.Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

Else

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

For j = 0 To .Components - 1

.Value = .Value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)

Next

End If

 

Case m_RATIONAL, m_SRATIONAL

BytesPerComponent = 8

.Offset_To_Value = _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _

ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)

.Value = _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _

"/" & _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _

ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7)

 

End Select

 

End If

 

End With

 

Next

 

End Sub

Enlace al comentario
Compartir en otros sitios web

Muy buena esa clase FLA...

Como decia yo lo tengo aun a medias, de hecho no contemplaba todos los datos exif, sino que me centraba en los que consideraba mas practicos.

Actualmente en mi Hoja de contactos estaba sacando los siguientes:

 

"DateTimeOriginal"

"ExifImageWidth

"ExifImageHeight

"ExposureTime"

"FNumber"

"FocalLength"

"ISOSpeedRatings"

"MeteringMode"

"SensingMethod"

 

Se admiten sugerencias para añadir o quitar alguno...

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Muy buena esa clase FLA...

Como decia yo lo tengo aun a medias, de hecho no contemplaba todos los datos exif, sino que me centraba en los que consideraba mas practicos.

Actualmente en mi Hoja de contactos estaba sacando los siguientes:

 

"DateTimeOriginal"

"ExifImageWidth

"ExifImageHeight

"ExposureTime"

"FNumber"

"FocalLength"

"ISOSpeedRatings"

"MeteringMode"

"SensingMethod"

 

Se admiten sugerencias para añadir o quitar alguno...

 

un saludo

 

 

Buenas...

 

 

Pienso que sería muy interesante añadir...:

 

Numero de disparos de la cámara.. (shutercount.....) para que puedan verificar si han comprado una cámara nueva de verdad......

 

 

Informacion GPS...

 

 

GPSInfo = &H8825&

 

 

 

La idea es crear una aplicación capaz de meter los datos de un GPS en las fotos adquiridas con idea de georeferenciar las fotos.

Me explico....

 

Si llevas un GPS adquiriendo datos de hora, fecha y posición...y una cámara haciendo fotos....lo fantástico seria poder unir ambos archivos.....

 

Un programa que mirara los datos exif de fecha y hora....buscara en los tracks del GPS y metiera la info en las fotos cuando coincida fecha y hora.....no se si me explico....

 

 

Si a las 13:24 horas (datos exif de la foto) he tirado una foto y el log del GPS me indica una posición concreta a esa misma hora.....meto los datos del GPS en la foto y ya tengo una foto georeferenciada.....

 

 

Así, podemos ofrecer a los compañeros que no disponen de entrada GPS en la cámara o GPS....de una herramienta que les ayude a georeferenciar sus fotos.....

 

 

 

 

Un saludo

Enlace al comentario
Compartir en otros sitios web

Bueno FLA, entiendo lo que propones y si, puede ser interesante, el caso es que no dispongo de gps y no se que tipo de archivos manejan estos aparatos para procesar esa información, será cuestión de buscarlo por la web y preparar la versión 2 con esta 'feature' que indicas :)

De momento la versión 1 la tengo mas o menos funcionando (me falta probarla en diferentes Sistemas operativos y corregir algun error que pueda surgir... de momento, funciona perfectamente en windows XP con office 2003).

 

En cuanto lo tenga un poco mas atado lo pondré a vuestra disposición para que podáis probarlo y dar vuestra opinión o sugerir cualquier cosa.

 

El funcionamiento actual es el siguiente:

Se selecciona la ruta de la carpeta (o copìamos del explorador de windows y pegamos en el programa) que queremos extraer la hoja de contactos

Seleccionamos el formato deseado, sólo hoja de contactos u Hoja de contactos con datos exif (ver imagenes de mensaje mas arriba)

Le damos al botón y voilá nos genera un documento de word (no es instantaneo, tarda un poco, dependiendo del número de imagenes en la carpeta)

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Buena iniciativa FLA, a ver si prospera, que sería interesante tener ahi una pequeña base de datos con información útil.

 

Me ha dado un aire un poco canalla y se me ha ocurrido añadir una restricción al programa... jeje

Simplemente el programa detecta si la imagen está tirada con un 'aparato' Nikon y si no es así no la procesa, es decir no la incluye en el documento de word... a lo mejor es una memez, o quien sabe, igual Nikon quiere patrocinarme... jajaja

 

Bueno, creo que al final no haré ninguna restricción ... se trataba de compartir esta 'utilidad' con quien quiera usarla, no de poner trabas a nadie...

 

saludos

Enlace al comentario
Compartir en otros sitios web

Buenas...

Pienso que sería muy interesante añadir...:

 

Numero de disparos de la cámara.. (shutercount.....) para que puedan verificar si han comprado una cámara nueva de verdad......

Informacion GPS...

GPSInfo = &H8825&

La idea es crear una aplicación capaz de meter los datos de un GPS en las fotos adquiridas con idea de georeferenciar las fotos.

Me explico....

 

Si llevas un GPS adquiriendo datos de hora, fecha y posición...y una cámara haciendo fotos....lo fantástico seria poder unir ambos archivos.....

 

Un programa que mirara los datos exif de fecha y hora....buscara en los tracks del GPS y metiera la info en las fotos cuando coincida fecha y hora.....no se si me explico....

Si a las 13:24 horas (datos exif de la foto) he tirado una foto y el log del GPS me indica una posición concreta a esa misma hora.....meto los datos del GPS en la foto y ya tengo una foto georeferenciada.....

Así, podemos ofrecer a los compañeros que no disponen de entrada GPS en la cámara o GPS....de una herramienta que les ayude a georeferenciar sus fotos.....

Un saludo

 

Pogramas para georefenciar fotografías ya existen, por ejemplo: FotoGPS y GPicSync

Enlace al comentario
Compartir en otros sitios web

Hola FLA

 

Sería posible pasar a dll la clase y ya que no necesita de ninguna librería externa no tendrías ni que hacerle archivos de dependencias, luego bastaría implementarla en las propiedades del proyecto y usarla en la aplicación. Eso haría que incluso se abrieran los desplegables mientras escribes el código llamando a la clase.

 

De todas formas voy a intentar copiar con tu permiso el código para ver que puedo hacer.

 

Private Function OpenJPGFile(ByVal inFile As String)

 

Dim fFile As Integer

 

fFile = FreeFile

 

Open inFile For Binary As #fFile

ReDim ExifTemp(LOF(fFile)) As Byte

Get #fFile, , ExifTemp

Close #fFile

 

End Function

 

Por lo que veo a la clase solo le tienes que pasar el nombre completo del archivo, el se encarga de pasarlo mediante la variable inFile y le asigna un puntero de archivo libre para abrirlo y cargar los datos en la matriz ExifTemp.

Corrígeme si me equivoco.

Enlace al comentario
Compartir en otros sitios web

Hola FLA

 

Sería posible pasar a dll la clase y ya que no necesita de ninguna librería externa no tendrías ni que hacerle archivos de dependencias, luego bastaría implementarla en las propiedades del proyecto y usarla en la aplicación. Eso haría que incluso se abrieran los desplegables mientras escribes el código llamando a la clase.

 

De todas formas voy a intentar copiar con tu permiso el código para ver que puedo hacer.

 

Private Function OpenJPGFile(ByVal inFile As String)

 

Dim fFile As Integer

 

fFile = FreeFile

 

Open inFile For Binary As #fFile

ReDim ExifTemp(LOF(fFile)) As Byte

Get #fFile, , ExifTemp

Close #fFile

 

End Function

 

Por lo que veo a la clase solo le tienes que pasar el nombre completo del archivo, el se encarga de pasarlo mediante la variable inFile y le asigna un puntero de archivo libre para abrirlo y cargar los datos en la matriz ExifTemp.

Corrígeme si me equivoco.

 

 

No hay problema.....

Mandame un MP con tu correo y mañana te mando la DLL......y al que quiera tambien....

 

 

 

 

Para emplear la clase.....

 

Un ejemplo: en este caso para VBA en excel que puedes encontrar en http://www.nikonistas.com/digital/foro/ind...showtopic=98197

 

'----------------------------------------

Dim objExif As New ExifReader

Dim txtExifInfo As String

'----------------------------------------

 

Private Sub CommandButton1_Click()

 

CommonDialog1.InitDir = "C:\Documents and Settings"

CommonDialog1.Filter = "Archivos de Imagen .jpg|*.jpg"

CommonDialog1.ShowOpen

 

If CommonDialog1.Filename = "" Then Exit Sub

Hoja1.Image1.Picture = LoadPicture(CommonDialog1.Filename)

Hoja1.Image1.PictureSizeMode = fmPictureSizeModeStretch

 

objExif.Load CommonDialog1.Filename

 

'extraccion de datos EXIF:

 

On Error Resume Next

fila = 2

 

While Hoja1.Cells(fila, 1) <> ""

Hoja1.Cells(fila, 3) = objExif.Tag(Hoja1.Cells(fila, 2))

fila = fila + 1

Wend

 

End Sub

Enlace al comentario
Compartir en otros sitios web

Bueno

a ver si lo pruebo un poco para poder subirlo este fin de semana.

esto es un boceto de la pantalla (hay que hacerlo un poco mas bonito), para que al menos entendais el funcionamiento.

Unicamente, seleccionamos la carpeta o directamente copiamos y pegamos la ruta.

Elegimos el formato le damos al boton y listo.

 

rely.jpg

 

un saludo

Enlace al comentario
Compartir en otros sitios web

  • 2 semanas más tarde...

Si FLA gracias, ya la tengo y hoy he estado haciendo pruebas.

 

Por cierto que después de 3 años desde que me jubilé sin tocar VB y me he picado de nuevo, pronto tendré algo que enseñaros, estoy estudiando un visor rápido de datos Exif basado en tu DLL y con salida en PDF de forma que facilite la impresión.

 

Si miras mi web hay un pequeño tutorial para novatos de VB donde en la sección "Artículos" hablo un poco del CommonDialog y de unas de sus características de trabajo. En programación siempre he defendido un dicho, "un error comentado deja de ser un error para convertirse en una característica" :wub:

 

Gracias de nuevo monstruo.

Enlace al comentario
Compartir en otros sitios web

Aqui estoy de vuelta tras unos dias larguiiiiisimos sin ordenador (me he tenido que comprar otro... ;) )... despues de releer otra vez los comentarios, alguien decia que no le veia la utilidad, bueno imagino que habrá gente que le guste mantener hojas de contactos para tener un indice mas o menos ordenado de sus trabajos, y si ademas tienes en cada foto sus exif, pues de un vistazo identificas esa foto que te gusta y tienes toda la info de como la hiciste (igual para los pros no es necesario, pero para novatos como yo... jeje)..

 

Volviendo al tema, ya tengo una primera versión operativa del programa, lo que no se es donde subirla para ponerla a disposicion vuestra

Si alguien puede indicarme le agradecería, mientras tanto intentaré probarlo en otros equipos para ver los resultados. Como digo es una primera versión y no está probada en todas las condiciones, pero bueno, que funciona, doy fe.

Evidentemente un requisito indispensable es tener instalado el office en el equipo :P.

 

un saludo

Enlace al comentario
Compartir en otros sitios web

Aqui estoy de vuelta tras unos dias larguiiiiisimos sin ordenador (me he tenido que comprar otro... ;) )... despues de releer otra vez los comentarios, alguien decia que no le veia la utilidad, bueno imagino que habrá gente que le guste mantener hojas de contactos para tener un indice mas o menos ordenado de sus trabajos, y si ademas tienes en cada foto sus exif, pues de un vistazo identificas esa foto que te gusta y tienes toda la info de como la hiciste (igual para los pros no es necesario, pero para novatos como yo... jeje)..

 

Volviendo al tema, ya tengo una primera versión operativa del programa, lo que no se es donde subirla para ponerla a disposicion vuestra

Si alguien puede indicarme le agradecería, mientras tanto intentaré probarlo en otros equipos para ver los resultados. Como digo es una primera versión y no está probada en todas las condiciones, pero bueno, que funciona, doy fe.

Evidentemente un requisito indispensable es tener instalado el office en el equipo ;).

 

un saludo

 

hola comandante,

yo decía que no entendía para qué sirve esto, y sigo sin comprenderlo. para ver una foto y sus exif uso ligthroom y listo, todas las fotos etiquetadas lo que me permite recuperarlas rápidamente por tema, lugar, etc, es cuestion solo de definir bien el arbol de etiquetas. Además, permite filtrar y ordenar por apertura, velocidad, objetivo, focal o lo que quiera.

 

En fin, cuando esté colgada por aquí la aplicacion espero poder probarla, así quizá entienda el motivo de su diseño

 

 

Saludos!

Enlace al comentario
Compartir en otros sitios web

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder a este tema...

×   Pegar como texto enriquecido.   Pegar como texto sin formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incrustado automáticamente..   Mostrar como un enlace en su lugar

×   Se ha restaurado el contenido anterior.   Limpiar editor

×   No se pueden pegar imágenes directamente. Carga o inserta imágenes desde la URL.

 Compartir

  • Explorando recientemente

    • No hay usuarios registrados viendo esta página.
×
×
  • Crear nuevo...