从sqliite3 db检索时,图像会旋转

时间:2010-04-27 11:49:50

标签: iphone image sqlite

我正在制作一个应用程序,它将相机胶卷图像保存为sqlite3数据库中的blob。 检索图像时,其尺寸会发生变化(高度和宽度互换)。这只发生在iPhone而不是模拟器上。请帮忙。

基本上,当我从数据库中检索图像并在iphone设备上运行时,它会从potrait更改为横向模式

您好, 请看下面的代码, 第一个片段是在db中存储图像,第二个是检索,第三个是绘图。


 -(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 :(得分:0)

很难说没有代码但是最重要的是,这个问题有几个可能的来源:

(1)问题可能出在图像视图而不是图像本身。代码中的某些内容可能会调整视图的大小。检查视图调整大小属性。如果图像视图是全屏的,那么视图控制器可能实际上认为它是横向方向,并且它实际上正确地显示图像但是方向错误。 (令人困惑的方向常数是实现这一目标的简单方法。)

(2)保存图像时格式错误。当UIImage重新生成它们时,交换宽度和高度。我从来没有见过这种情况,但理论错误的图像理论上可能会导致这种情况发生。

由于这只发生在设备上,我敢打赌问题是(1)。稍微忽略图像,而是查看视图控制器如何处理它们的方向和大小。