0

アップロードされたビットマップ イメージを 16 進数に変換する次の C# コーディングがあります。目標 C で同じ目標を達成するには、アルゴリズムに従う必要があります。画像ギャラリーから選択した画像を含む UIImageView があるとします。この選択した画像を 16 進数に変換し、テキスト ファイルに書き込む必要があります。

誰か、このコードを Objective C に変換するのを手伝ってください。IOS 開発の知識はある程度ありますが、画像処理の知識はあまりありません。

これは私のコードです、

            Bitmap bm1 = (Bitmap)pictureBox1.Image;

            int PictureWidth = pictureBox1.Image.Width;
            int PictureHeight = pictureBox1.Image.Height;
            int PictureX;
            int PictureY;

            int NVImageWidth;
            int NVImageHeight;

            NVImageWidth = PictureWidth;
            NVImageHeight = PictureHeight;

            int Quotient;
            int Remainder;
            int wp;

            wp = 0;

            StreamWriter sw = new StreamWriter("D:\\Test.txt");

            for (PictureX = 0; PictureX <= PictureWidth - 1; PictureX++)
            {
                for (PictureY = 0; PictureY <= NVImageHeight - 1; PictureY++)
                {
                    Color c1 = bm1.GetPixel(PictureX, PictureY);

                    if ((PictureY % 8) == 0)
                    {
                        wp = 0;
                        wp = (c1.G!=0) ? 0 : 1;
                    }
                    else if ((PictureY % 8) == 7)
                    {
                        wp = (wp << 1) | ((c1.G!=0) ? 0 : 1);
                        sw.Write(string.Format("%{0:x2}", wp));
                    }
                    else
                    {
                        wp = (wp << 1) | ((c1.G!=0) ? 0 : 1);
                    }
                }
            }

            sw.Close();
4

1 に答える 1

1

I have a suggestion:

First convert the UIImage to NSData. Then convert NSData to Hexadecimal.

So for example,

//converting to hexadecimal
    -(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces
    {
        const unsigned char* bytes = (const unsigned char*)[self bytes];
        NSUInteger nbBytes = [self length];
        //If spaces is true, insert a space every this many input bytes (twice this many output characters).
        static const NSUInteger spaceEveryThisManyBytes = 4UL;
        //If spaces is true, insert a line-break instead of a space every this many spaces.
        static const NSUInteger lineBreakEveryThisManySpaces = 4UL;
        const NSUInteger lineBreakEveryThisManyBytes = spaceEveryThisManyBytes * lineBreakEveryThisManySpaces;
        NSUInteger strLen = 2*nbBytes + (spaces ? nbBytes/spaceEveryThisManyBytes : 0);

        NSMutableString* hex = [[NSMutableString alloc] initWithCapacity:strLen];
        for(NSUInteger i=0; i<nbBytes; ) {
            [hex appendFormat:@"%02X", bytes[i]];
            //We need to increment here so that the every-n-bytes computations are right.
            ++i;

            if (spaces) {
                if (i % lineBreakEveryThisManyBytes == 0) [hex appendString:@"\n"];
                else if (i % spaceEveryThisManyBytes == 0) [hex appendString:@" "];
            }
        }
        return [hex autorelease];
    }

NSData *imageData = UIImagePNGRepresentation(myImage.image);
NSString* hex = [imageData hexRepresentationWithSpaces_AS:YES];
于 2013-07-21T16:22:27.003 に答える