この場合は 16 ビットのグレースケール イメージであるデータ セットへのポインターを含む構造体があります。このデータを表示できるように NSImage に変換し、.TIF ファイルとして保存したいと考えています。マニュアルからのルートは次のようになります。
(Create *myNSImData from frame->image, which is a pointer)
NSImage *TestImage = [[NSImage alloc] initWithData : myNSImData];
(display TestImage, save it, whatever else)
[TestImage release];
NSData オブジェクトを作成し、16 ビット データの配列が含まれていることを確認する方法がわかりません。ポインターを再キャストしようとすると、警告が表示され、データが表示されません。単純にポインターをインクリメントして、一度に 1 バイトずつフレーム -> イメージからデータ オブジェクトに転送することはできますが、配列構造をデータ オブジェクトに伝達する方法がわかりません。何か案は?ありがとう
あなたの提案を使用したその他の試み 次の方法で、このデータを .TIF ファイルに変換できます。
for (uint32 row = 0 ; row < MaxHeight ; row++)
{
for (uint32 column = 0;column< MaxWidth;column++)
{
tempData = (uint8_t)*frame->image; //first byte
*frame->image++;
buf[2 * column + 1] = (unsigned char) tempData;
tempData = (uint8_t)*frame->image; //second byte
*frame->image++;
buf[2 * column] = (unsigned char) tempData;
}
TIFFWriteScanline(tiffile,buf,row,0);
}
このように生成された .TIF ファイルを使用して、NSImage を作成して表示できます。
NSImage *TestImage = [[[NSImage alloc] initWithContentsOfFile:inFilePath] autorelease];
[viewWindow setImage: TestImage];
私の質問は、同じ方法で表示できる NSData オブジェクトを作成できますか? 私は次のことを試しました(製品は画像の高さ*幅です):
NSData *ReadImage = [[[NSData alloc] initWithBytes: frame->image length:2*product] autorelease] ;
NSImage *NewImage = [[[NSImage alloc] initWithData:ReadImage] autorelease];
NSSize newSize;
newSize.height = MaxHeight; //height of the image
newSize.width = MaxWidth; //width of the image
[NewImage setSize:newSize];
[viewWindow setImage: NewImage];
これを試してみると、何も表示されません。また、データを持つ uint16_t の配列を作成し、それへのポインターを提供しようとしましたが、何も表示されません。何か案は?たとえば、1 ピクセルあたり 2 バイトを使用していることなどを NSData に通知する必要がありますか? ありがとうモンティ・ウッド