一度全画面表示に拡大すると判読できるドキュメントの写真を撮るカメラ アプリを取得しようとしています (作成した png を pdf ファイルに入れて、データベースに転送できるようにします。
タブレットは、RT ではなく、atom プロセッサを搭載したフル バージョンの Windows タブレットです。
カメラのデフォルト サイズ (448x252) を送信すると、すべて正常に動作します。手動サイズ (カメラは 1920x1080、1280x720、960x540、640x480、640x360 をサポート) を設定しようとすると、不明なエラーが発生します。
SetConfigParms 関数の videoinfoheader に問題があります。この関数を通常どおり使用すると、画像サイズは -2147467259 になります。私はそれをいじってみましたが、画像のサイズは高さ x 幅 x 1.5 である必要があると確信しています (少なくとも 448x252 であり、解像度に関係なくバッファ長エラーも発生しません)。v.BmiHeader.ImageSize = iHeight * iWidth * 1.5 アプリは 448x252 でも問題なく動作しますが、1280x720 または 1920x1080 を試してみると、不明なエラーが発生します。
私はそれを台無しにしているのは、変更されていない他の videoinfoheader データだと考え始めています。たとえば、srcRect は、高さと幅を手動で入力した後でも 0x448x0x252 のままです。ImageSize は (上記のように) 自動的に計算されません。また、他のパラメーターも問題になる可能性があります。
videoinfo ヘッダーのすべてのフィールドを手動で計算する方法に関するリンクはありますか? または、誰かがこれを理解するのを手伝ってくれますか? 私はできる限りのことをしました.何時間もグーグルで検索しました..私はそれを得ることができません.
役立つ場合は、SetConfigParms 関数を次に示します。他の機能が必要な場合、または完全なカメラ クラスが必要な場合はお知らせください。長いので、誰かがそれを求めるまで、私はそれを含めるつもりはありません.
Private Sub SetConfigParms(pStill As IPin, iWidth As Integer, iHeight As Integer, iBPP As Short)
Dim hr As Integer
Dim media As AMMediaType
Dim v As VideoInfoHeader
Dim videoStreamConfig As IAMStreamConfig = TryCast(pStill, IAMStreamConfig)
' Get the existing format block
hr = videoStreamConfig.GetFormat(media)
DsError.ThrowExceptionForHR(hr)
Try
' copy out the videoinfoheader
v = New VideoInfoHeader()
Marshal.PtrToStructure(media.formatPtr, v)
' if overriding the width, set the width
If iWidth > 0 Then
v.BmiHeader.Width = iWidth
End If
' if overriding the Height, set the Height
If iHeight > 0 Then
v.BmiHeader.Height = iHeight
End If
' if overriding the bits per pixel
If iBPP > 0 Then
v.BmiHeader.BitCount = iBPP
End If
v.BmiHeader.ImageSize = iHeight * iWidth * 1.5
' Copy the media structure back
Marshal.StructureToPtr(v, media.formatPtr, True)
' Set the new format
hr = videoStreamConfig.SetFormat(media)
MsgBox(DsError.GetErrorText(hr))
DsError.ThrowExceptionForHR(hr)
Finally
DsUtils.FreeAMMediaType(media)
media = Nothing
End Try
End Sub