2

ユーザーが Web カメラからスナップショットを取得できるようにするために 、JQuery プラグイン ( ScriptCam ) を使用しています。

JSコードを使用したボタンは次のとおりです。

<asp:Button ID="btnTakeSnapshot" runat="server" Text="Take SS" OnClientClick="base64_toimage(); return false;" />

JS コード:

function base64_toimage() {  
    document.getElementById('<%= imgBinary.ClientID %>').src = "data:image/png;base64," + $.scriptcam.getFrameAsBase64();  
    document.getElementById('<%= txtImgBinary.ClientID %>').value = $.scriptcam.getFrameAsBase64();  
};

ユーザーがクリックすると、スナップショットは次のAsp:Image要素にバインドされます。

<asp:Image ID="imgBinary" runat="server" Width="160" Height="120" /> 

そして、これにバイナリコードも書きますAsp:TextBox:

<asp:TextBox ID="txtImgBinary" TextMode="MultiLine" runat="server"></asp:TextBox> 

ここで、私がやりたかったのは、ユーザーがスナップショットを取得して最後の「保存」ボタンをクリックした後、txtImgBinary.Text値からバイナリ コードimage columnを SQL Server に保存することです。私もそうでした、それはすべて良かったです。

しかし、データベースからのバイナリ値を別のページにバインドした後、機能しませんでした。これが私がした方法です:

imgUserPhoto.Attributes.Add("src", "data:image/png;base64," + binaryCodeFromDB);

PictureBoxの要素でも同じバイナリコードを使用しようとしましWinformsたが、そのArgument Exception: Parameter is not validエラーが発生しました。

私は昨日からこれをやろうとしてきました。

そのため、バイナリデータの保存方法に問題があるのではないかと考えました。テキストボックスを空のグラスとして使用しているため、テキストボックスにコピーして後でテキストボックスからコピーしている間にバイナリコードが変更されている可能性があります。

また、この方法で保存した画像には、別の作業コンポーネントの画像バイナリ データとは異なるバイナリ データがあります。

src属性をJSにバインドした後、この画像をサーバーに保存する方法はあるのでしょうか? この画像を保存できる場合は、temp.jpg 画像を使用し、後でそのバイナリ コードを生成します。

前もって感謝します。

4

1 に答える 1

1

私は間違った方法でコードを保存する可能性について誤解していませんでした。

通常、base64配列をテキストボックスに複製してから、テキストボックスの値を画像列にコピーしていました。

byte64配列が配列と同じではないことに気づかなかったのは残念ですbyte[]

したがって、この値を保存する前に、次の小さな会話をしました。

byte[] bytes = Convert.FromBase64String(txtImgBinary.Text);

bytes次に、この配列をデータベースに保存します。今では正常に動作しています。


興味のある方のために、後でこの値を使用する方法を次に示します。

Asp:Image要素の場合)

Image1.Attributes.Add("src", "data:image/png;base64," + Convert.ToBase64String(bytesValueFromDB));

Winforms PictureBox要素の場合)

MemoryStream stream = new MemoryStream(bytesValueFromDB);
System.Drawing.Image tempImage = System.Drawing.Image.FromStream(stream);
string FName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\tempImage.jpg";
tempImage.Save(FName);
imageFileName = FName;
ctlPictureBox.ImageLocation = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\tempImage.jpg";
于 2012-06-13T11:42:50.243 に答える