私はBerkeley_socketsを使ってLinuxにサーバーを持っており、iPodクライアントとのTCP接続を作成します。サーバーからiPodに送信するIplImage* img;
があります。私はwrite(socket,/*DATA*/,43200);
コマンドを使用し、私が送信しようとしたデータはreinterpret_cast<char*>(img)
,とimg->imageData
です。これらすべての選択肢は実際にはあらゆる種類のデータを送信します。 iPodの側でサーバーからiPodクライアントにIplImageを送信する方法
私はこの方法データを受信(。私はここにSOで見てきたような複雑なものを気にしない、それだけで一枚の画像からすべてのデータを受信するためです。):
bytesRead = [iStream read: (char*)[buffer mutableBytes] + totalBytesRead maxLength: 43200 - totalBytesRead];
は、画像全体を受け取った後、私はこの持っている:今
[buffer setLength: 43200];
NSData *imagem = [NSData dataWithBytes:buffer length:43200];
UIImage *final= [self UIImageFromIplImage:imagem];
を..私は、私は、iPodに取り組んでOpenCVのを持っている可能性が知っている、私はそれが動作するように取得する方法について簡単な説明を見つけることができません、だから私はthe second code from this webpageを使ってそれを適応させました。私は私のイメージのすべての仕様を知っているからです。 CGImageCreate()
機能からのすべての変数まで):。
- (UIImage *)UIImageFromIplImage:(NSData *)image {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// Allocating the buffer for CGImage
NSData *data = [NSData dataWithBytes:image length:43200];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
// Creating CGImage from chunk of IplImage
size_t width = 240;
size_t height = 180;
size_t depth = 8; //bitsPerComponent
size_t depthXnChannels = 8; //bitsPerPixel
size_t widthStep = 240; //bytesPerRow
CGImageRef imageRef = CGImageCreate(width, height, depth, depthXnChannels, widthStep, colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,provider, NULL, false, kCGRenderingIntentDefault);
// Getting UIImage from CGImage
UIImage *ret = [UIImage imageWithCGImage:imageRef];
lolView.image = ret;
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return ret;
}
問題:私は画像を表示すると、私は送られてきた画像であっても、それは完全に奇妙なと'random'取得いつも同じ。何が間違っているのか分かりません。
PS:TCP接続は、数字や単語などの他のデータとうまく機能しています。画像はグレースケールです。
ありがとうございました。