Изображения извлекаются при получении из sqliite3 db - PullRequest
0 голосов
/ 27 апреля 2010

Я делаю приложение, которое сохраняет изображения с камеры в виде BLOB-объектов в базе данных sqlite3. Когда изображение извлекается, его размеры изменяются (высота и ширина меняются местами). Это происходит только на iphone, а не на симуляторе. Пожалуйста, помогите.

В основном, когда я получаю изображение из БД и запускаю его на устройстве iphone, оно меняется с портретной в альбомный режим

Привет, Пожалуйста, смотрите код ниже, Первый фрагмент хранит изображение в БД, второй извлекает, а третий рисует.


 -(int) InsertImageInImagesTable:(UIImage *)taggedImage{

NSData *imgData=UIImagePNGRepresentation(taggedImage);
//unsigned char aBuufer[[imgData length]];
//[imgData getBytes:aBuufer length:[imgData length]];
NSString *sql=[NSString stringWithFormat:@"INSERT INTO tblImages(Image)values(?)"];

sqlite3_stmt *statement;
int imageId=-1;
if(statement=[self prepare:sql])
{
    sqlite3_bind_blob(statement, 1, [imgData bytes], [imgData length],nil);

    //sqlite3_bind_int((statement, 2, [imgData bytes], [imgData length],nil);
    sqlite3_step(statement);
    imageId=sqlite3_last_insert_rowid(dbh);
}

sqlite3_finalize(statement);
return imageId;

}

     -(NSDictionary *)SelectImagesFromImagesTable{

NSMutableArray *imgArr=[[NSMutableArray alloc]init];
NSMutableArray *idArr=[[NSMutableArray alloc]init]; 

NSString *slctSql=@"Select ImageId, Image from tblImages order by ImageId asc";


sqlite3_stmt *statement;
//NSData *imgData;
int imageId=-1;

if(statement=[self prepare:slctSql])
{
    //sqlite3_
    while(sqlite3_step(statement)==SQLITE_ROW)
    {
        imageId=sqlite3_column_int(statement, 0);
        NSData *imgData=[[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 1) length:sqlite3_column_bytes(statement, 1)];
        UIImage *im=[UIImage imageWithData:imgData];

        [imgArr addObject:[UIImage imageWithData:imgData]];
        [idArr addObject:[NSString stringWithFormat:@"%d",imageId]];
        [imgData release];
    }
    sqlite3_finalize(statement);
}
NSMutableDictionary *imgDict=[NSMutableDictionary dictionaryWithObjects:imgArr forKeys:idArr];
[imgArr release];
[idArr release];
//array=idArr;
return imgDict;

}

-(void)drawRect:(CGRect)rect 
{ 
  float newHeight; 
  float newWidth; 
  float ratio=1.0;
  CGContextRef ctx = UIGraphicsGetCurrentContext(); 
 if (myPic != NULL) 
 { 
int hh=myPic.size.height;
int ww=myPic.size.width;
if(myPic.size.height>367)
{

  ratio = myPic.size.height/367; 
  if (myPic.size.width/320 > ratio) { 
    ratio = myPic.size.width/320; 
  }
}
newHeight = myPic.size.height/ratio; 
newWidth = myPic.size.width/ratio;

    [myPic drawInRect:CGRectMake(self.center.x-(newWidth/2),self.center.y-newHeight/2),newWidth,newHeight)];  
    } 
  }

1 Ответ

0 голосов
/ 27 апреля 2010

Сложно сказать без кода, но у меня в голове есть несколько возможных источников этой проблемы:

(1) Проблема может быть в виде изображения, а не в самом изображении. Что-то в коде может изменить размер представления. Проверьте представления изменения размеров свойств. Если представление изображения является полноэкранным, тогда контроллер представления может фактически думать, что это альбомная ориентация, и он фактически отображает изображение правильно, но для неправильной ориентации. (Смешение констант ориентации - простой способ сделать это.)

(2) Изображения неверно отформатированы при сохранении. Когда UIImage восстанавливает их, ширина и высота меняются местами. Я никогда не видел, чтобы это случилось, но изображение в неправильном формате теоретически может вызвать это.

Поскольку это происходит только на устройстве, могу поспорить, что проблема в (1). Немного проигнорируйте изображения и посмотрите, как контроллеры представления обрабатывают их ориентацию и размеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...