2010-04-27 76 views
0

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

基本上当我从数据库取回的图像,并将其从potrait改变为横向模式

您好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 *[email protected]"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)]; 
    } 
    } 
+0

尝试发布一些代码,显示您如何存储和检索数据。 – 2010-04-27 12:34:53

+0

是的,代码会有帮助。 – TechZen 2010-04-27 12:53:29

回答

0

很难无需代码,但是从我的头顶说,有几个可能的来源这个问题:

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

(2)保存图像时格式不正确。当UIImage重新生成它们时,宽度和高度被交换。我从来没有见过这种情况发生,但是错误格式的图像理论上可能导致这种情况。由于这只发生在设备上,我敢打赌问题是(1)。稍微忽略图像,而是看看视图控制器如何处理它们的方向和大小。

+0

我不使用imageview ..我宁愿使用drawinRect绘制图像 – Deepika 2010-04-27 13:19:17

+0

设置绘图区域时,最有可能调整了宽度和高度。没有看到代码就说不出来。这不是一个常见或已知的问题。你在这个特定的版本中有一些东西。 – TechZen 2010-04-27 16:16:33

+0

嗨, 我粘贴了代码。 请帮忙。 图像只有在从数据库和iphone设备中检索后绘制后才会反转。 – Deepika 2010-04-30 05:33:37