2010-04-27 72 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