我正在制作一个应用程序,它将相机胶卷图像保存为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)];
}
}
答案 0 :(得分:0)
很难说没有代码但是最重要的是,这个问题有几个可能的来源:
(1)问题可能出在图像视图而不是图像本身。代码中的某些内容可能会调整视图的大小。检查视图调整大小属性。如果图像视图是全屏的,那么视图控制器可能实际上认为它是横向方向,并且它实际上正确地显示图像但是方向错误。 (令人困惑的方向常数是实现这一目标的简单方法。)
(2)保存图像时格式错误。当UIImage重新生成它们时,交换宽度和高度。我从来没有见过这种情况,但理论错误的图像理论上可能会导致这种情况发生。
由于这只发生在设备上,我敢打赌问题是(1)。稍微忽略图像,而是查看视图控制器如何处理它们的方向和大小。