Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Una de vector

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Una de vector Responder citando

al realizar las siguientes, sentencias, dentro de una programa.

esto es el cpp

Código:
//---------------------------------------------------------------------------

#pragma hdrstop
#include "UFotos.h"
//---------------------------------------------------------------------------
#include <vcl.h>
#include <vector.h>
//---------------------------------------------------------------------------
void __fastcall TFotos::setFoto(TImage *Img){
      this->Fotos.push_back(Img);
}
//---------------------------------------------------------------------------
TImage * __fastcall TFotos::getFoto(){
    return (  this->Fotos[pos] );
}
//---------------------------------------------------------------------------
int __fastcall TFotos::Count(void){
    return this->Fotos.size();
}
//---------------------------------------------------------------------------
void __fastcall TFotos::NextFoto(void){
    if(pos> this->Fotos.size()){
        pos =this->Fotos.size();
    }else{
        pos++;
    }
}
//---------------------------------------------------------------------------
void __fastcall TFotos::PriorFoto(void){

    if(pos<0){
        pos = 0;
    }else{
        pos--;
    }
}
//---------------------------------------------------------------------------
void __fastcall TFotos::FirstFoto(void){
    pos = 0;
}

//---------------------------------------------------------------------------
void __fastcall TFotos::LastFoto(void){
    pos =this->Fotos.size();
}
//---------------------------------------------------------------------------

#pragma package(smart_init)


Esta parte es la declaracion de la clase
Fotos.h
Código:
//---------------------------------------------------------------------------
#ifndef UFotosH
#define UFotosH
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stack.h>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
class TFotos{
    //-----------------------------------------------------------------------
    private:
        std::vector<TImage*>Fotos;
        unsigned int pos;
    //-----------------------------------------------------------------------
    public:
        TFotos(void){
            pos=0;
        };
        ~TFotos(){};
        //-------------------------------------------------------------------
        void __fastcall setFoto(TImage *Img);
        TImage * __fastcall getFoto();
        int __fastcall Count(void);
        void __fastcall NextFoto(void);
        void __fastcall PriorFoto(void);
        void __fastcall FirstFoto(void);
        void __fastcall LastFoto(void);

};

//---------------------------------------------------------------------------
#endif


Todo anda correcto, es mas al compilar esta correcto, el problema es que no puedo regresar la imagen, alguien sabe..
para traer la imagen. realizo lo siguiente.

Código:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    //image es un TImage componente de builder
    pFot->NextFoto();
    image= pFot->getFoto();
}
//---------------------------------------------------------------------------



haber algo esta mal, o no sirve el codigo.. ya no doy una, con esto de las imagenes..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola César

Creo que el problema está en estas funciones:
Código:

TImage * __fastcall TFotos::getFoto(){
    return (  this->Fotos[pos] );
}
//---------------------------------------------------------------------------
void __fastcall TFotos::NextFoto(void){
    if(pos> this->Fotos.size()){
        pos =this->Fotos.size();
    }else{
        pos++;
    }
}

En especial en la de NextFoto. Los vectores normalmente se acceden desde la posición 0 hasta la "size() - 1". Por tanto, la posición "Fotos.size()" no pertenece al vector y debería darte un error de acceso a memoria.[/code]
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Además te preguntas
Código:
 if(pos> this->Fotos.size())
cuando según tu código pos no puede ser nunca mayor que ...size(). Revisa también LastFoto() según lo que te sugiere masBecas.

(Lo mismo ocurre con PriorFoto, que te preguntas si es < 0 cuando, según tu código, nunca poría serlo, ¿no te falla también esa parte del código?)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Bien, eso estaba correcto, el problema, es que no puedo regresar la imagen...

Código:
//---------------------------------------------------------------------------
TImage * __fastcall TFotos::getFoto(){
    return (  this->Fotos[pos] );
}


En esta parte de la clase, se supone que accedo al elemento que se encuentra en this->Fotos[pos],


el problema es en este codigo

Código:
image= pFot->getFoto();


que no regresa la foto, para ponerlo en el TImage de nombre image
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

bien al parecer se ha solucionado, toda la informacion.. pero cuando inserto imagenes, ahora resulta que las imagenes hace referencia a una direccion de memoria,que hace que las imagenes. se pierdna, ejemplo
[1] carita
[2] monito
[3] casa
supongamos estas 3 imagnes, bueno, al parecer, quedan de la siguiente manera, ya que hacen referencia a una sola imagen, que es la ultima
[1] casa
[2] casa
[3] casa

y ponto la clase con las nuevas modificaciones..


la CLASE

Código:
//-archivo UFotos.h--------------------------------------------------------------
#ifndef UFotosH
#define UFotosH
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stack.h>
#include <vector>
#include <list>
//---------------------------------------------------------------------------
class TFotos{
    //-----------------------------------------------------------------------
    private:
        std::vector<TImage *> Fotos;

    //-----------------------------------------------------------------------
    public:
        int posIndex;
        TFotos(void){
            posIndex=0;
        };
        ~TFotos(){};
        //-------------------------------------------------------------------
        void setFoto(TImage *Img);
        TPicture *getFoto();
        int Count(void);
        void NextFoto(void);
        void PriorFoto(void);
        void FirstFoto(void);
        void LastFoto(void);

};

//---------------------------------------------------------------------------
#endif


la implementacion, ahora se cambió, no regreso un TImage, si no, un TPicture, pero se pierde el enlace una orientacion.. a alguien, le pude servir una sucesion de imagenes, de esta manera..

Código:
//----archivo UFotos.cpp-----------------------------------------------------------------------
#pragma hdrstop
#include "UFotos.h"
//---------------------------------------------------------------------------
#include <vcl.h>
#include <vector>
//---------------------------------------------------------------------------
void TFotos::setFoto(TImage *Img){
  this->Fotos.push_back(Img);
//    this->Fotos.insert(this->Fotos.end(),new TImage(Img));
}
//---------------------------------------------------------------------------
TPicture *TFotos::getFoto(){
    return (this->Fotos[posIndex]->Picture);
}
//---------------------------------------------------------------------------
int TFotos::Count(void){
    return this->Fotos.size();
}
//---------------------------------------------------------------------------
void TFotos::NextFoto(void){
    posIndex++;
    if(posIndex > (int) this->Fotos.size()-1)
        posIndex =this->Fotos.size()-1;
}
//---------------------------------------------------------------------------
void TFotos::PriorFoto(void){
    posIndex--;
    if(posIndex < 0 )
        posIndex = 0;
}
//---------------------------------------------------------------------------
void TFotos::FirstFoto(void){
    posIndex =0 ;
}
//---------------------------------------------------------------------------
void TFotos::LastFoto(void){
    posIndex = this->Fotos.size()-1;
}
//---------------------------------------------------------------------------
#pragma package(smart_init)


alguien, me dice por que no se guardan las imagenes independientes. y por que cuando inserto otra, esta se reptie, en todas las que estan dentro del vector, claro esta, si las meto, de la siguiente manera,

TFotos *pFoto;
pFoto->setFoto(Image1);
pFoto->setFoto(Image2);
pFoto->setFoto(Image3);


funciona correctamente. pero no es el caso, vamos, estoy grabando imagenes, desde el ejemplo de _LEO, para scannear de este mismo foro...

y estoy pasando las imagenes, del scanner a una sucesion de fotos.. como un rollo fotografico.. algo asi..

saludos...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.