Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
andanteyk committed Sep 9, 2017
2 parents da8aedd + ab2f221 commit d81a6f0
Show file tree
Hide file tree
Showing 51 changed files with 4,507 additions and 1,645 deletions.
171 changes: 97 additions & 74 deletions Browser/FormBrowser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ private void AddLog( int priority, string message ) {
BrowserHost.AsyncRemoteRun( () => BrowserHost.Proxy.AddLog( priority, message ) );
}

private void SendErrorReport( string exceptionName, string message ) {
BrowserHost.AsyncRemoteRun( () => BrowserHost.Proxy.SendErrorReport( exceptionName, message ) );
}


public void InitialAPIReceived() {

Expand All @@ -239,11 +243,6 @@ private void SizeAdjuster_SizeChanged( object sender, EventArgs e ) {
return;
}

/*/
Utility.Logger.Add( 1, string.Format( "SizeChanged: BR ({0},{1}) {2}x{3}, PA {4}x{5}, CL {6}x{7}",
Browser.Location.X, Browser.Location.Y, Browser.Width, Browser.Height, SizeAdjuster.Width, SizeAdjuster.Height, ClientSize.Width, ClientSize.Height ) );
//*/

ApplyZoom();
}

Expand Down Expand Up @@ -319,8 +318,7 @@ public void ApplyStyleSheet() {

} catch ( Exception ex ) {

BrowserHost.AsyncRemoteRun( () =>
BrowserHost.Proxy.SendErrorReport( ex.ToString(), "スタイルシートの適用に失敗しました。" ) );
SendErrorReport( ex.ToString(), "スタイルシートの適用に失敗しました。" );
}

}
Expand All @@ -345,8 +343,7 @@ public void DestroyDMMreloadDialog() {

} catch ( Exception ex ) {

BrowserHost.AsyncRemoteRun( () =>
BrowserHost.Proxy.SendErrorReport( ex.ToString(), "DMMによるページ更新ダイアログの非表示に失敗しました。" ) );
SendErrorReport( ex.ToString(), "DMMによるページ更新ダイアログの非表示に失敗しました。" );
}

}
Expand Down Expand Up @@ -423,41 +420,6 @@ public void ApplyZoom() {
}



/// <summary>
/// スクリーンショットを保存します。
/// </summary>
/// <param name="folderPath">保存するフォルダへのパス。</param>
/// <param name="screenShotFormat">スクリーンショットのフォーマット。1=jpg, 2=png</param>
public void SaveScreenShot( string folderPath, int screenShotFormat ) {
if ( !System.IO.Directory.Exists( folderPath ) ) {
System.IO.Directory.CreateDirectory( folderPath );
}

string ext;
System.Drawing.Imaging.ImageFormat format;

switch ( screenShotFormat ) {
case 1:
ext = "jpg";
format = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
case 2:
default:
ext = "png";
format = System.Drawing.Imaging.ImageFormat.Png;
break;
}


SaveScreenShot( string.Format(
"{0}\\{1:yyyyMMdd_HHmmssff}.{2}",
folderPath,
DateTime.Now,
ext ), format );

}

// ラッパークラスに戻す
private static HtmlDocument WrapHTMLDocument( IHTMLDocument2 document ) {
ConstructorInfo[] constructor = typeof( HtmlDocument ).GetConstructors(
Expand Down Expand Up @@ -486,19 +448,20 @@ private static HtmlElement getFrameElementById( HtmlDocument document, String id
}



/// <summary>
/// スクリーンショットを保存します
/// スクリーンショットを撮影します
/// </summary>
/// <param name="path">保存先。</param>
/// <param name="format">画像のフォーマット。</param>
private void SaveScreenShot( string path, ImageFormat format ) {
/// <param name="is32bpp"></param>
/// <returns></returns>
private Bitmap TakeScreenShot( bool is32bpp ) {

var wb = Browser;

if ( !IsKanColleLoaded ) {
AddLog( 3, string.Format( "艦これが読み込まれていないため、スクリーンショットを撮ることはできません。" ) );
System.Media.SystemSounds.Beep.Play();
return;
return null;
}

try {
Expand Down Expand Up @@ -541,42 +504,104 @@ private void SaveScreenShot( string path, ImageFormat format ) {
if ( viewobj != null ) {
var rect = new RECT { left = 0, top = 0, width = KanColleSize.Width, height = KanColleSize.Height };

bool is32bpp = format == ImageFormat.Png && Configuration.AvoidTwitterDeterioration;

// twitter の劣化回避を行う場合は32ビットの色深度で作業する
using ( var image = new Bitmap( rect.width, rect.height, is32bpp ? PixelFormat.Format32bppArgb : PixelFormat.Format24bppRgb ) ) {

var device = new DVTARGETDEVICE { tdSize = 0 };
var image = new Bitmap( rect.width, rect.height, is32bpp ? PixelFormat.Format32bppArgb : PixelFormat.Format24bppRgb );

using ( var g = Graphics.FromImage( image ) ) {
var hdc = g.GetHdc();
viewobj.Draw( 1, 0, IntPtr.Zero, device, IntPtr.Zero, hdc, rect, null, IntPtr.Zero, IntPtr.Zero );
g.ReleaseHdc( hdc );
}

if ( is32bpp ) {
// 不透明ピクセルのみだと jpeg 化されてしまうため、1px だけわずかに透明にする
Color temp = image.GetPixel( image.Width - 1, image.Height - 1 );
image.SetPixel( image.Width - 1, image.Height - 1, Color.FromArgb( 252, temp.R, temp.G, temp.B ) );
}
var device = new DVTARGETDEVICE { tdSize = 0 };

using ( var g = Graphics.FromImage( image ) ) {
var hdc = g.GetHdc();
viewobj.Draw( 1, 0, IntPtr.Zero, device, IntPtr.Zero, hdc, rect, null, IntPtr.Zero, IntPtr.Zero );
g.ReleaseHdc( hdc );
}

image.Save( path, format );
if ( is32bpp ) {
// 不透明ピクセルのみだと jpeg 化されてしまうため、1px だけわずかに透明にする
Color temp = image.GetPixel( image.Width - 1, image.Height - 1 );
image.SetPixel( image.Width - 1, image.Height - 1, Color.FromArgb( 252, temp.R, temp.G, temp.B ) );
}

return image;
}

_lastScreenShotPath = path;
AddLog( 2, string.Format( "スクリーンショットを {0} に保存しました。", path ) );

} catch ( Exception ex ) {

BrowserHost.AsyncRemoteRun( () =>
BrowserHost.Proxy.SendErrorReport( ex.ToString(), "スクリーンショットの保存時にエラーが発生しました。" ) );
SendErrorReport( ex.ToString(), "スクリーンショットの撮影時にエラーが発生しました。" );
System.Media.SystemSounds.Beep.Play();

}

return null;
}


/// <summary>
/// スクリーンショットを撮影し、設定で指定された保存先に保存します。
/// </summary>
public void SaveScreenShot() {

int savemode = Configuration.ScreenShotSaveMode;
int format = Configuration.ScreenShotFormat;
string folderPath = Configuration.ScreenShotPath;
bool is32bpp = format != 1 && Configuration.AvoidTwitterDeterioration;

using ( var image = TakeScreenShot( is32bpp ) ) {

if ( image == null )
return;

// to file
if ( ( savemode & 1 ) != 0 ) {
try {

if ( !System.IO.Directory.Exists( folderPath ) ) {
System.IO.Directory.CreateDirectory( folderPath );
}

string ext;
System.Drawing.Imaging.ImageFormat imgFormat;

switch ( format ) {
case 1:
ext = "jpg";
imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
case 2:
default:
ext = "png";
imgFormat = System.Drawing.Imaging.ImageFormat.Png;
break;
}

string path = string.Format( "{0}\\{1:yyyyMMdd_HHmmssff}.{2}", folderPath, DateTime.Now, ext );
image.Save( path, imgFormat );
_lastScreenShotPath = path;

AddLog( 2, string.Format( "スクリーンショットを {0} に保存しました。", path ) );

} catch ( Exception ex ) {

SendErrorReport( ex.ToString(), "スクリーンショットの保存に失敗しました。" );
}
}


// to clipboard
if ( ( savemode & 2 ) != 0 ) {
try {

Clipboard.SetImage( image );

if ( ( savemode & 3 ) != 3 )
AddLog( 2, "スクリーンショットをクリップボードにコピーしました。" );

} catch ( Exception ex ) {

SendErrorReport( ex.ToString(), "スクリーンショットのクリップボードへのコピーに失敗しました。" );
}
}
}

}

Expand All @@ -589,7 +614,6 @@ public void SetProxy( string proxy ) {
WinInetUtil.SetProxyInProcess( proxy, "local" );
}

//AddLog( 1, "setproxy:" + proxy );
BrowserHost.AsyncRemoteRun( () => BrowserHost.Proxy.SetProxyCompleted() );
}

Expand Down Expand Up @@ -750,7 +774,7 @@ private void SetVolumeState() {


private void ToolMenu_Other_ScreenShot_Click( object sender, EventArgs e ) {
SaveScreenShot( Configuration.ScreenShotPath, Configuration.ScreenShotFormat );
SaveScreenShot();
}

private void ToolMenu_Other_Zoom_Decrement_Click( object sender, EventArgs e ) {
Expand Down Expand Up @@ -1053,8 +1077,7 @@ private void ToolMenu_Other_LastScreenShot_CopyToClipboard_Click( object sender,
AddLog( 2, string.Format( "スクリーンショット {0} をクリップボードにコピーしました。", _lastScreenShotPath ) );
}
} catch ( Exception ex ) {
BrowserHost.AsyncRemoteRun( () =>
BrowserHost.Proxy.SendErrorReport( ex.Message, "スクリーンショットのクリップボードへのコピーに失敗しました。" ) );
SendErrorReport( ex.Message, "スクリーンショットのクリップボードへのコピーに失敗しました。" );
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion BrowserLib/IBrowser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public interface IBrowser {
void InitialAPIReceived();

[OperationContract]
void SaveScreenShot( string path, int format );
void SaveScreenShot();

[OperationContract]
void RefreshBrowser();
Expand Down
8 changes: 7 additions & 1 deletion BrowserLib/IBrowserHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ public class BrowserConfiguration {
[DataMember]
public int ScreenShotFormat { get; set; }

/// <summary>
/// スクリーンショットの保存モード
/// </summary>
[DataMember]
public int ScreenShotSaveMode { get; set; }

/// <summary>
/// 適用するスタイルシート
/// </summary>
Expand All @@ -129,7 +135,7 @@ public class BrowserConfiguration {
public bool IsDMMreloadDialogDestroyable { get; set; }

/// <summary>
/// Twitter の画像圧縮を回避するか
/// スクリーンショットにおいて、Twitter の画像圧縮を回避するか
/// </summary>
[DataMember]
public bool AvoidTwitterDeterioration { get; set; }
Expand Down
Binary file modified ElectronicObserver/Assets.zip
Binary file not shown.
Binary file added ElectronicObserver/Assets/Equipment/NightFighter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit d81a6f0

Please sign in to comment.