第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何旋轉(zhuǎn)UIImage 90度?

如何旋轉(zhuǎn)UIImage 90度?

牛魔王的故事 2019-07-02 15:53:54
如何旋轉(zhuǎn)UIImage 90度?我有一個UIImage那是UIImageOrientationUp(肖像)我想逆時針旋轉(zhuǎn)90度(對景觀)。我不想用CGAffineTransform..我要的像素UIImage移動位置。我使用的代碼塊(如下所示)最初是為了調(diào)整UIImage做這件事。我將目標(biāo)大小設(shè)置為UIImage但我有個錯誤:(錯誤):CGBitmapContextCreate:無效的數(shù)據(jù)字節(jié)/行:對于8個整數(shù)位/組件、3個組件、kCGImageAlphaPreMultiiedLast.應(yīng)當(dāng)至少為1708。(當(dāng)我提供一個較小的大小作為目標(biāo)大小BTW時,我不會收到錯誤)。如何旋轉(zhuǎn)我的UIImage90度CCW只使用核心圖形功能,同時保持當(dāng)前大???-(UIImage*)reverseImageByScalingToSize:(CGSize)targetSize:(UIImage*)anImage{     UIImage* sourceImage = anImage;      CGFloat targetWidth = targetSize.height;     CGFloat targetHeight = targetSize.width;     CGImageRef imageRef = [sourceImage CGImage];     CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);     CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);     if (bitmapInfo == kCGImageAlphaNone) {         bitmapInfo = kCGImageAlphaNoneSkipLast;     }     CGContextRef bitmap;     if (sourceImage.imageOrientation == UIImageOrientationUp || sourceImage.imageOrientation == UIImageOrientationDown) {         bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef),          CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);     } else {         bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef),          CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);     }            if (sourceImage.imageOrientation == UIImageOrientationRight) {         CGContextRotateCTM (bitmap, radians(90));         CGContextTranslateCTM (bitmap, 0, -targetHeight);     } else if (sourceImage.imageOrientation == UIImageOrientationLeft) {         CGContextRotateCTM (bitmap, radians(-90));         CGContextTranslateCTM (bitmap, -targetWidth, 0);     } else if (sourceImage.imageOrientation == UIImageOrientationDown) {         // NOTHING     } else if (sourceImage.imageOrientation == UIImageOrientationUp) {         CGContextRotateCTM (bitmap, radians(90));         CGContextTranslateCTM (bitmap, 0, -targetHeight);     }  }
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個贊

比如:

static inline double radians (double degrees) {return degrees * M_PI/180;}UIImage* rotate(UIImage* src, UIImageOrientation orientation){
    UIGraphicsBeginImageContext(src.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    if (orientation == UIImageOrientationRight) {
        CGContextRotateCTM (context, radians(90));
    } else if (orientation == UIImageOrientationLeft) {
        CGContextRotateCTM (context, radians(-90));
    } else if (orientation == UIImageOrientationDown) {
        // NOTHING
    } else if (orientation == UIImageOrientationUp) {
        CGContextRotateCTM (context, radians(90));
    }

    [src drawAtPoint:CGPointMake(0, 0)];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;}


查看完整回答
反對 回復(fù) 2019-07-02
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個贊

我認(rèn)為最簡單的方法(也是線程安全)是這樣做:

//assume that the image is loaded in landscape mode from diskUIImage * landscapeImage = [UIImage imageNamed:imgname];
UIImage * portraitImage = [[UIImage alloc] initWithCGImage: landscapeImage.CGImage
                                                     scale: 1.0
                                               orientation: UIImageOrientationRight];

注:AS腦器說,這只是修改圖像的方向數(shù)據(jù)-像素數(shù)據(jù)是未被觸及的。對于某些應(yīng)用程序來說,這可能還不夠。

或者在SWIFT:

let portraitImage  : UIImage = UIImage(CGImage: landscapeImage.CGImage ,
            scale: 1.0 ,
            orientation: UIImageOrientation.Right)


查看完整回答
反對 回復(fù) 2019-07-02
?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個贊

請查看HardyMacia的簡單和令人敬畏的代碼:切割縮放旋轉(zhuǎn)圖像

打電話

UIImage *rotatedImage = [originalImage imageRotatedByDegrees:90.0];

謝謝Hardy Macia!

標(biāo)題:

  • (UIImage*)ImageAtRect:(CGRect)RECT;

  • (UIImage*)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize;)

  • (UIImage*)imageByScalingProportionallyToSize:(CGSize)targetSize;)

  • (UIImage*)ImageByScalingToSize:(CGSize)Target Size;

  • (UIImage*)ImageRotatedByRadians:(CGFloat)弧度;

  • (UIImage*)ImageRotatedByDegrees:(CGFloat)度;

由于鏈接可能會失效,下面是完整的代碼

////  UIImage-Extensions.h////  Created by Hardy Macia on 7/1/09.//  Copyright 2009 Catamount Software. All rights reserved.
//#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface UIImage (CS_Extensions)- (UIImage *)imageAtRect:(CGRect)rect;
- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize;- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize;
- (UIImage *)imageByScalingToSize:(CGSize)targetSize;- (UIImage *)imageRotatedByRadians:(CGFloat)radians;- (UIImage *)imageRotatedByDegrees:
(CGFloat)degrees;@end;////  UIImage-Extensions.m////  Created by Hardy Macia on 7/1/09.
//  Copyright 2009 Catamount Software. All rights reserved.//#import "UIImage-Extensions.h"CGFloat DegreesToRadians(CGFloat degrees) 
{return degrees * M_PI / 180;};CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};@implementation UIImage (CS_Extensions)
-(UIImage *)imageAtRect:(CGRect)rect{

   CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);
   UIImage* subImage = [UIImage imageWithCGImage: imageRef];
   CGImageRelease(imageRef);

   return subImage;}- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize {

   UIImage *sourceImage = self;
   UIImage *newImage = nil;

   CGSize imageSize = sourceImage.size;
   CGFloat width = imageSize.width;
   CGFloat height = imageSize.height;

   CGFloat targetWidth = targetSize.width;
   CGFloat targetHeight = targetSize.height;

   CGFloat scaleFactor = 0.0;
   CGFloat scaledWidth = targetWidth;
   CGFloat scaledHeight = targetHeight;

   CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

   if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

      CGFloat widthFactor = targetWidth / width;
      CGFloat heightFactor = targetHeight / height;

      if (widthFactor > heightFactor) 
         scaleFactor = widthFactor;
      else
         scaleFactor = heightFactor;

      scaledWidth  = width * scaleFactor;
      scaledHeight = height * scaleFactor;

      // center the image

      if (widthFactor > heightFactor) {
         thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
      } else if (widthFactor < heightFactor) {
         thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
      }
   }


   // this is actually the interesting part:

   UIGraphicsBeginImageContext(targetSize);

   CGRect thumbnailRect = CGRectZero;
   thumbnailRect.origin = thumbnailPoint;
   thumbnailRect.size.width  = scaledWidth;
   thumbnailRect.size.height = scaledHeight;

   [sourceImage drawInRect:thumbnailRect];

   newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   if(newImage == nil) NSLog(@"could not scale image");


   return newImage ;}- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {

   UIImage *sourceImage = self;
   UIImage *newImage = nil;

   CGSize imageSize = sourceImage.size;
   CGFloat width = imageSize.width;
   CGFloat height = imageSize.height;

   CGFloat targetWidth = targetSize.width;
   CGFloat targetHeight = targetSize.height;

   CGFloat scaleFactor = 0.0;
   CGFloat scaledWidth = targetWidth;
   CGFloat scaledHeight = targetHeight;

   CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

   if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

      CGFloat widthFactor = targetWidth / width;
      CGFloat heightFactor = targetHeight / height;

      if (widthFactor < heightFactor) 
         scaleFactor = widthFactor;
      else
         scaleFactor = heightFactor;

      scaledWidth  = width * scaleFactor;
      scaledHeight = height * scaleFactor;

      // center the image

      if (widthFactor < heightFactor) {
         thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
      } else if (widthFactor > heightFactor) {
         thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
      }
   }


   // this is actually the interesting part:

   UIGraphicsBeginImageContext(targetSize);

   CGRect thumbnailRect = CGRectZero;
   thumbnailRect.origin = thumbnailPoint;
   thumbnailRect.size.width  = scaledWidth;
   thumbnailRect.size.height = scaledHeight;

   [sourceImage drawInRect:thumbnailRect];

   newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   if(newImage == nil) NSLog(@"could not scale image");


   return newImage ;}- (UIImage *)imageByScalingToSize:(CGSize)targetSize {

   UIImage *sourceImage = self;
   UIImage *newImage = nil;

   //   CGSize imageSize = sourceImage.size;
   //   CGFloat width = imageSize.width;
   //   CGFloat height = imageSize.height;

   CGFloat targetWidth = targetSize.width;
   CGFloat targetHeight = targetSize.height;

   //   CGFloat scaleFactor = 0.0;
   CGFloat scaledWidth = targetWidth;
   CGFloat scaledHeight = targetHeight;

   CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

   // this is actually the interesting part:

   UIGraphicsBeginImageContext(targetSize);

   CGRect thumbnailRect = CGRectZero;
   thumbnailRect.origin = thumbnailPoint;
   thumbnailRect.size.width  = scaledWidth;
   thumbnailRect.size.height = scaledHeight;

   [sourceImage drawInRect:thumbnailRect];

   newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   if(newImage == nil) NSLog(@"could not scale image");


   return newImage ;}- (UIImage *)imageRotatedByRadians:(CGFloat)radians{
   return [self imageRotatedByDegrees:RadiansToDegrees(radians)];}- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees 
{   
   // calculate the size of the rotated view's containing box for our drawing space
   UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
   CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees));
   rotatedViewBox.transform = t;
   CGSize rotatedSize = rotatedViewBox.frame.size;
   [rotatedViewBox release];

   // Create the bitmap context
   UIGraphicsBeginImageContext(rotatedSize);
   CGContextRef bitmap = UIGraphicsGetCurrentContext();

   // Move the origin to the middle of the image so we will rotate and scale around the center.
   CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);

   //   // Rotate the image context
   CGContextRotateCTM(bitmap, DegreesToRadians(degrees));

   // Now, draw the rotated/scaled image into the context
   CGContextScaleCTM(bitmap, 1.0, -1.0);
   CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);

   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return newImage;}@end;

分享


查看完整回答
反對 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 1348 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號