 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 06 Oct, 2004 1:37 am Asunto: Una de vector |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
masBecas Lt

Registrado: 23 Oct 2003Mensajes: 98Ubicación: La Laguna, Tenerife
|
Publicado: Mie 06 Oct, 2004 9:10 am Asunto: |
|
|
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 |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Mie 06 Oct, 2004 9:58 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 06 Oct, 2004 4:18 pm Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 07 Oct, 2004 1:07 am Asunto: |
|
|
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... _________________
 |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|